summaryrefslogtreecommitdiff
path: root/program/lib/MDB2/Driver/mysqli.php
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2010-01-26 13:45:16 +0000
committeralecpl <alec@alec.pl>2010-01-26 13:45:16 +0000
commit2273d4117fd50ee44dcdaa28fd6444383dc403a0 (patch)
treedc9d429523d816ab8d1d65547f300e4e97fac387 /program/lib/MDB2/Driver/mysqli.php
parent8f85e3759c4eb4b61e8aab2dd4071e429deb81a3 (diff)
- Add support for MDB2's 'sqlsrv' driver (#1486395)
Diffstat (limited to 'program/lib/MDB2/Driver/mysqli.php')
-rw-r--r--program/lib/MDB2/Driver/mysqli.php114
1 files changed, 66 insertions, 48 deletions
diff --git a/program/lib/MDB2/Driver/mysqli.php b/program/lib/MDB2/Driver/mysqli.php
index 8f0379147..4543f5fe1 100644
--- a/program/lib/MDB2/Driver/mysqli.php
+++ b/program/lib/MDB2/Driver/mysqli.php
@@ -43,7 +43,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
-// $Id: mysqli.php,v 1.188 2008/03/13 03:31:55 afz Exp $
+// $Id: mysqli.php 292715 2009-12-28 14:06:34Z quipo $
//
/**
@@ -189,7 +189,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
$native_code = @mysqli_connect_errno();
$native_msg = @mysqli_connect_error();
}
- if (is_null($error)) {
+ if (null === $error) {
static $ecode_map;
if (empty($ecode_map)) {
$ecode_map = array(
@@ -320,7 +320,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
{
$this->debug('Starting transaction/savepoint', __FUNCTION__, array('is_manip' => true, 'savepoint' => $savepoint));
$this->_getServerCapabilities();
- if (!is_null($savepoint)) {
+ if (null !== $savepoint) {
if (!$this->supports('savepoints')) {
return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'savepoints are not supported', __FUNCTION__);
@@ -331,10 +331,11 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
}
$query = 'SAVEPOINT '.$savepoint;
return $this->_doQuery($query, true);
- } elseif ($this->in_transaction) {
+ }
+ if ($this->in_transaction) {
return MDB2_OK; //nothing to do
}
- $query = $this->start_transaction ? 'START TRANSACTION' : 'SET AUTOCOMMIT = 1';
+ $query = $this->start_transaction ? 'START TRANSACTION' : 'SET AUTOCOMMIT = 0';
$result =& $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
@@ -364,7 +365,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
return $this->raiseError(MDB2_ERROR_INVALID, null, null,
'commit/release savepoint cannot be done changes are auto committed', __FUNCTION__);
}
- if (!is_null($savepoint)) {
+ if (null !== $savepoint) {
if (!$this->supports('savepoints')) {
return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'savepoints are not supported', __FUNCTION__);
@@ -387,7 +388,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
return $result;
}
if (!$this->start_transaction) {
- $query = 'SET AUTOCOMMIT = 0';
+ $query = 'SET AUTOCOMMIT = 1';
$result =& $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
@@ -418,7 +419,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
return $this->raiseError(MDB2_ERROR_INVALID, null, null,
'rollback cannot be done changes are auto committed', __FUNCTION__);
}
- if (!is_null($savepoint)) {
+ if (null !== $savepoint) {
if (!$this->supports('savepoints')) {
return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'savepoints are not supported', __FUNCTION__);
@@ -433,7 +434,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
return $result;
}
if (!$this->start_transaction) {
- $query = 'SET AUTOCOMMIT = 0';
+ $query = 'SET AUTOCOMMIT = 1';
$result =& $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
@@ -590,7 +591,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
*/
function setCharset($charset, $connection = null)
{
- if (is_null($connection)) {
+ if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -606,7 +607,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
((50000 <= $client_info) && (50006 > $client_info)))
) {
$query = "SET NAMES '".mysqli_real_escape_string($connection, $charset)."'";
- if (!is_null($collation)) {
+ if (null !== $collation) {
$query .= " COLLATE '".mysqli_real_escape_string($connection, $collation)."'";
}
return $this->_doQuery($query, true, $connection);
@@ -673,8 +674,14 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
}
if ($force) {
- @mysqli_close($this->connection);
+ $ok = @mysqli_close($this->connection);
+ if (!$ok) {
+ return $this->raiseError(MDB2_ERROR_DISCONNECT_FAILED,
+ null, null, null, __FUNCTION__);
+ }
}
+ } else {
+ return false;
}
return parent::disconnect($force);
}
@@ -742,13 +749,13 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
return $result;
}
- if (is_null($connection)) {
+ if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
}
}
- if (is_null($database_name)) {
+ if (null === $database_name) {
$database_name = $this->database_name;
}
@@ -770,7 +777,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
$result = mysqli_query($connection, $query);
}
- if (!$result) {
+ if (!$result && 0 !== mysqli_errno($connection)) {
$err =& $this->raiseError(null, null, null,
'Could not execute statement', __FUNCTION__);
return $err;
@@ -807,7 +814,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
*/
function _affectedRows($connection, $result = null)
{
- if (is_null($connection)) {
+ if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -946,7 +953,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
$this->supported['prepared_statements'] = true;
}
- // SAVEPOINTS were introduced in MySQL 4.0.14 and 4.1.1 (InnoDB)
+ // SAVEPOINTs were introduced in MySQL 4.0.14 and 4.1.1 (InnoDB)
if (version_compare($server_version, '4.1.0', '>=')) {
if (version_compare($server_version, '4.1.1', '<')) {
$this->supported['savepoints'] = false;
@@ -988,7 +995,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
function _skipUserDefinedVariable($query, $position)
{
$found = strpos(strrev(substr($query, 0, $position)), '@');
- if ($found === false) {
+ if (false === $found) {
return $position;
}
$pos = strlen($query) - strlen(substr($query, $position)) - $found - 1;
@@ -1025,6 +1032,12 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
*/
function &prepare($query, $types = null, $result_types = null, $lobs = array())
{
+ // connect to get server capabilities (http://pear.php.net/bugs/16147)
+ $connection = $this->getConnection();
+ if (PEAR::isError($connection)) {
+ return $connection;
+ }
+
if ($this->options['emulate_prepared']
|| $this->supported['prepared_statements'] !== true
) {
@@ -1060,7 +1073,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
} else {
break;
}
- if (is_null($placeholder_type)) {
+ if (null === $placeholder_type) {
$placeholder_type_guess = $query[$p_position];
}
@@ -1081,7 +1094,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
}
if ($query[$position] == $placeholder_type_guess) {
- if (is_null($placeholder_type)) {
+ if (null === $placeholder_type) {
$placeholder_type = $query[$p_position];
$question = $colon = $placeholder_type;
}
@@ -1103,10 +1116,6 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
$position = $p_position;
}
}
- $connection = $this->getConnection();
- if (PEAR::isError($connection)) {
- return $connection;
- }
if (!$is_manip) {
static $prep_statement_counter = 1;
@@ -1140,8 +1149,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
/**
* Execute a SQL REPLACE query. A REPLACE query is identical to a INSERT
* query, except that if there is already a row in the table with the same
- * key field values, the REPLACE query just updates its values instead of
- * inserting a new row.
+ * key field values, the old row is deleted before the new row is inserted.
*
* The REPLACE type of query does not make part of the SQL standards. Since
* practically only MySQL implements it natively, this type of query is
@@ -1199,6 +1207,7 @@ class MDB2_Driver_mysqli extends MDB2_Driver_Common
*
* Default: 0
*
+ * @see http://dev.mysql.com/doc/refman/5.0/en/replace.html
* @return mixed MDB2_OK on success, a MDB2 error on failure
*/
function replace($table, $fields)
@@ -1357,7 +1366,7 @@ class MDB2_Result_mysqli extends MDB2_Result_Common
*/
function &fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null)
{
- if (!is_null($rownum)) {
+ if (null !== $rownum) {
$seek = $this->seek($rownum);
if (PEAR::isError($seek)) {
return $seek;
@@ -1378,7 +1387,7 @@ class MDB2_Result_mysqli extends MDB2_Result_Common
}
if (!$row) {
- if ($this->result === false) {
+ if (false === $this->result) {
$err =& $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
return $err;
@@ -1409,7 +1418,8 @@ class MDB2_Result_mysqli extends MDB2_Result_Common
if ($object_class == 'stdClass') {
$row = (object) $row;
} else {
- $row = new $object_class($row);
+ $rowObj = new $object_class($row);
+ $row = $rowObj;
}
}
++$this->rownum;
@@ -1458,11 +1468,12 @@ class MDB2_Result_mysqli extends MDB2_Result_Common
function numCols()
{
$cols = @mysqli_num_fields($this->result);
- if (is_null($cols)) {
- if ($this->result === false) {
+ if (null === $cols) {
+ if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
- } elseif (is_null($this->result)) {
+ }
+ if (null === $this->result) {
return count($this->types);
}
return $this->db->raiseError(null, null, null,
@@ -1510,13 +1521,16 @@ class MDB2_Result_mysqli extends MDB2_Result_Common
*/
function free()
{
- if (is_object($this->result) && $this->db->connection) {
- $free = @mysqli_free_result($this->result);
- if ($free === false) {
- return $this->db->raiseError(null, null, null,
- 'Could not free result', __FUNCTION__);
+ do {
+ if (is_object($this->result) && $this->db->connection) {
+ $free = @mysqli_free_result($this->result);
+ if (false === $free) {
+ return $this->db->raiseError(null, null, null,
+ 'Could not free result', __FUNCTION__);
+ }
}
- }
+ } while ($this->result = $this->nextResult());
+
$this->result = false;
return MDB2_OK;
}
@@ -1544,10 +1558,11 @@ class MDB2_BufferedResult_mysqli extends MDB2_Result_mysqli
function seek($rownum = 0)
{
if ($this->rownum != ($rownum - 1) && !@mysqli_data_seek($this->result, $rownum)) {
- if ($this->result === false) {
+ if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
- } elseif (is_null($this->result)) {
+ }
+ if (null === $this->result) {
return MDB2_OK;
}
return $this->db->raiseError(MDB2_ERROR_INVALID, null, null,
@@ -1587,11 +1602,12 @@ class MDB2_BufferedResult_mysqli extends MDB2_Result_mysqli
function numRows()
{
$rows = @mysqli_num_rows($this->result);
- if (is_null($rows)) {
- if ($this->result === false) {
+ if (null === $rows) {
+ if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
- } elseif (is_null($this->result)) {
+ }
+ if (null === $this->result) {
return 0;
}
return $this->db->raiseError(null, null, null,
@@ -1646,12 +1662,14 @@ class MDB2_Statement_mysqli extends MDB2_Statement_Common
*
* @param mixed $result_class string which specifies which result class to use
* @param mixed $result_wrap_class string which specifies which class to wrap results in
- * @return mixed a result handle or MDB2_OK on success, a MDB2 error on failure
+ *
+ * @return mixed MDB2_Result or integer (affected rows) on success,
+ * a MDB2 error on failure
* @access private
*/
function &_execute($result_class = true, $result_wrap_class = false)
{
- if (is_null($this->statement)) {
+ if (null === $this->statement) {
$result =& parent::_execute($result_class, $result_wrap_class);
return $result;
}
@@ -1731,7 +1749,7 @@ class MDB2_Statement_mysqli extends MDB2_Statement_Common
$query.= ' USING @'.implode(', @', array_values($this->positions));
} else {
$result = @call_user_func_array('mysqli_stmt_bind_param', $parameters);
- if ($result === false) {
+ if (false === $result) {
$err =& $this->db->raiseError(null, null, null,
'Unable to bind parameters', __FUNCTION__);
return $err;
@@ -1813,7 +1831,7 @@ class MDB2_Statement_mysqli extends MDB2_Statement_Common
*/
function free()
{
- if (is_null($this->positions)) {
+ if (null === $this->positions) {
return $this->db->raiseError(MDB2_ERROR, null, null,
'Prepared statement has already been freed', __FUNCTION__);
}
@@ -1824,7 +1842,7 @@ class MDB2_Statement_mysqli extends MDB2_Statement_Common
$result = $this->db->raiseError(null, null, null,
'Could not free statement', __FUNCTION__);
}
- } elseif (!is_null($this->statement)) {
+ } elseif (null !== $this->statement) {
$connection = $this->db->getConnection();
if (PEAR::isError($connection)) {
return $connection;