diff options
author | Andrew Dolgov <[email protected]> | 2013-04-17 18:56:13 +0400 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2013-04-17 18:56:13 +0400 |
commit | ae35bb87ebcf08007a6086f136b98cba2448d34f (patch) | |
tree | a3f6f19b0c24b01e73218880e8d825b84b7a8d8c /classes | |
parent | a42c55f02b7e313ab61bf826794d0888f2dceae1 (diff) |
support mysqli when available
Diffstat (limited to 'classes')
-rw-r--r-- | classes/db.php | 8 | ||||
-rw-r--r-- | classes/db/mysql.php | 4 | ||||
-rw-r--r-- | classes/db/mysqli.php | 74 |
3 files changed, 83 insertions, 3 deletions
diff --git a/classes/db.php b/classes/db.php index 6dc31a22e..c9d9ad5ea 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 fe5d05e2f..aab05aca2 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 000000000..e82f66300 --- /dev/null +++ b/classes/db/mysqli.php @@ -0,0 +1,74 @@ +<?php +class Db_Mysqli implements IDb { + private $link; + + function connect($host, $user, $pass, $db, $port) { + $this->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; + } + +} +?> |