diff options
Diffstat (limited to 'public/system/library/db/mpdo.php')
-rw-r--r-- | public/system/library/db/mpdo.php | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/public/system/library/db/mpdo.php b/public/system/library/db/mpdo.php new file mode 100644 index 0000000..1cdb0ea --- /dev/null +++ b/public/system/library/db/mpdo.php @@ -0,0 +1,111 @@ +<?php +namespace DB; +final class mPDO { + private $connection = null; + private $statement = null; + + public function __construct($hostname, $username, $password, $database, $port = '3306') { + try { + $this->connection = new \PDO("mysql:host=" . $hostname . ";port=" . $port . ";dbname=" . $database, $username, $password, array(\PDO::ATTR_PERSISTENT => true)); + } catch(\PDOException $e) { + throw new \Exception('Failed to connect to database. Reason: \'' . $e->getMessage() . '\''); + } + + $this->connection->exec("SET NAMES 'utf8'"); + $this->connection->exec("SET CHARACTER SET utf8"); + $this->connection->exec("SET CHARACTER_SET_CONNECTION=utf8"); + $this->connection->exec("SET SQL_MODE = ''"); + } + + public function prepare($sql) { + $this->statement = $this->connection->prepare($sql); + } + + public function bindParam($parameter, $variable, $data_type = \PDO::PARAM_STR, $length = 0) { + if ($length) { + $this->statement->bindParam($parameter, $variable, $data_type, $length); + } else { + $this->statement->bindParam($parameter, $variable, $data_type); + } + } + + public function execute() { + try { + if ($this->statement && $this->statement->execute()) { + $data = array(); + + while ($row = $this->statement->fetch(\PDO::FETCH_ASSOC)) { + $data[] = $row; + } + + $result = new \stdClass(); + $result->row = (isset($data[0])) ? $data[0] : array(); + $result->rows = $data; + $result->num_rows = $this->statement->rowCount(); + } + } catch(\PDOException $e) { + throw new \Exception('Error: ' . $e->getMessage() . ' Error Code : ' . $e->getCode()); + } + } + + public function query($sql, $params = array()) { + $this->statement = $this->connection->prepare($sql); + + $result = false; + + try { + if ($this->statement && $this->statement->execute($params)) { + $data = array(); + + while ($row = $this->statement->fetch(\PDO::FETCH_ASSOC)) { + $data[] = $row; + } + + $result = new \stdClass(); + $result->row = (isset($data[0]) ? $data[0] : array()); + $result->rows = $data; + $result->num_rows = $this->statement->rowCount(); + } + } catch (\PDOException $e) { + throw new \Exception('Error: ' . $e->getMessage() . ' Error Code : ' . $e->getCode() . ' <br />' . $sql); + } + + if ($result) { + return $result; + } else { + $result = new \stdClass(); + $result->row = array(); + $result->rows = array(); + $result->num_rows = 0; + return $result; + } + } + + public function escape($value) { + return str_replace(array("\\", "\0", "\n", "\r", "\x1a", "'", '"'), array("\\\\", "\\0", "\\n", "\\r", "\Z", "\'", '\"'), $value); + } + + public function countAffected() { + if ($this->statement) { + return $this->statement->rowCount(); + } else { + return 0; + } + } + + public function getLastId() { + return $this->connection->lastInsertId(); + } + + public function isConnected() { + if ($this->connection) { + return true; + } else { + return false; + } + } + + public function __destruct() { + $this->connection = null; + } +} |