From ae35bb87ebcf08007a6086f136b98cba2448d34f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 17 Apr 2013 18:56:13 +0400 Subject: [PATCH] support mysqli when available --- classes/db.php | 8 +++-- classes/db/mysql.php | 4 ++- classes/db/mysqli.php | 74 +++++++++++++++++++++++++++++++++++++++++++ install/index.php | 2 +- 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 classes/db/mysqli.php diff --git a/classes/db.php b/classes/db.php index 6dc31a22..c9d9ad5e 100644 --- a/classes/db.php +++ b/classes/db.php @@ -7,7 +7,11 @@ class Db implements IDb { private function __construct() { switch (DB_TYPE) { case "mysql": - $this->adapter = new Db_Mysql(); + if (function_exists("mysqli_connect")) { + $this->adapter = new Db_Mysqli(); + } else { + $this->adapter = new Db_Mysql(); + } break; case "pgsql": $this->adapter = new Db_Pgsql(); @@ -16,7 +20,7 @@ class Db implements IDb { die("Unknown DB_TYPE: " . DB_TYPE); } - $this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT); + $this->link = $this->adapter->connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, defined('DB_PORT') ? DB_PORT : false); } private function __clone() { diff --git a/classes/db/mysql.php b/classes/db/mysql.php index fe5d05e2..aab05aca 100644 --- a/classes/db/mysql.php +++ b/classes/db/mysql.php @@ -20,6 +20,8 @@ class Db_Mysql implements IDb { } function escape_string($s, $strip_tags = true) { + if ($strip_tags) $s = strip_tags($s); + return mysql_real_escape_string($s, $this->link); } @@ -54,7 +56,7 @@ class Db_Mysql implements IDb { } function last_error() { - return mysql_affected_rows($this->link); + return mysql_error(); } function init() { diff --git a/classes/db/mysqli.php b/classes/db/mysqli.php new file mode 100644 index 00000000..e82f6630 --- /dev/null +++ b/classes/db/mysqli.php @@ -0,0 +1,74 @@ +link = mysqli_connect($host, $user, $pass, $db, $port); + + if ($this->link) { + $this->init(); + + return $this->link; + } else { + die("Unable to connect to database (as $user to $host, database $db): " . mysqli_error()); + } + } + + function escape_string($s, $strip_tags = true) { + if ($strip_tags) $s = strip_tags($s); + + return mysqli_real_escape_string($this->link, $s); + } + + function query($query, $die_on_error = true) { + $result = mysqli_query($this->link, $query); + if (!$result) { + user_error("Query $query failed: " . ($this->link ? mysqli_error($this->link) : "No connection"), + $die_on_error ? E_USER_ERROR : E_USER_WARNING); + } + + return $result; + } + + function fetch_assoc($result) { + return mysqli_fetch_assoc($result); + } + + + function num_rows($result) { + return mysqli_num_rows($result); + } + + function fetch_result($result, $row, $param) { + if (mysqli_data_seek($result, $row)) { + $line = mysqli_fetch_assoc($result); + return $line[$param]; + } else { + return false; + } + } + + function close() { + return mysqli_close($this->link); + } + + function affected_rows($result) { + return mysqli_affected_rows($this->link); + } + + function last_error() { + return mysqli_error(); + } + + function init() { + $this->query("SET time_zone = '+0:0'"); + + if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { + $this->query("SET NAMES " . MYSQL_CHARSET); + } + + return true; + } + +} +?> diff --git a/install/index.php b/install/index.php index 1aae5da8..99339aca 100644 --- a/install/index.php +++ b/install/index.php @@ -44,7 +44,7 @@ array_push($errors, "PHP support for JSON is required, but was not found."); } - if ($db_type == "mysql" && !function_exists("mysql_connect")) { + if ($db_type == "mysql" && !function_exists("mysql_connect") && !function_exists("mysqli_connect")) { array_push($errors, "PHP support for MySQL is required for configured $db_type in config.php."); } -- 2.39.2