Merge "Fix type doc in StatusValue"
[lhc/web/wiklou.git] / includes / db / DatabaseMysqli.php
index e9c4b39..e468601 100644 (file)
  * @see Database
  */
 class DatabaseMysqli extends DatabaseMysqlBase {
+       /** @var mysqli */
+       protected $mConn;
+
        /**
         * @param string $sql
         * @return resource
         */
        protected function doQuery( $sql ) {
+               $conn = $this->getBindingHandle();
+
                if ( $this->bufferResults() ) {
-                       $ret = $this->mConn->query( $sql );
+                       $ret = $conn->query( $sql );
                } else {
-                       $ret = $this->mConn->query( $sql, MYSQLI_USE_RESULT );
+                       $ret = $conn->query( $sql, MYSQLI_USE_RESULT );
                }
 
                return $ret;
@@ -50,8 +55,8 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         */
        protected function mysqlConnect( $realServer ) {
                global $wgDBmysql5;
-               # Fail now
-               # Otherwise we get a suppressed fatal error, which is very hard to track down
+
+               # Avoid suppressed fatal error, which is very hard to track down
                if ( !function_exists( 'mysqli_init' ) ) {
                        throw new DBConnectionError( $this, "MySQLi functions missing,"
                                . " have you compiled PHP with the --with-mysqli option?\n" );
@@ -76,9 +81,18 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                        $socket = $hostAndSocket[1];
                }
 
+               $mysqli = mysqli_init();
+
                $connFlags = 0;
                if ( $this->mFlags & DBO_SSL ) {
                        $connFlags |= MYSQLI_CLIENT_SSL;
+                       $mysqli->ssl_set(
+                               $this->sslKeyPath,
+                               $this->sslCertPath,
+                               null,
+                               $this->sslCAPath,
+                               $this->sslCiphers
+                       );
                }
                if ( $this->mFlags & DBO_COMPRESS ) {
                        $connFlags |= MYSQLI_CLIENT_COMPRESS;
@@ -87,7 +101,6 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                        $realServer = 'p:' . $realServer;
                }
 
-               $mysqli = mysqli_init();
                if ( $wgDBmysql5 ) {
                        // Tell the server we're communicating with it in UTF-8.
                        // This may engage various charset conversions.
@@ -116,8 +129,10 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return bool
         */
        protected function mysqlSetCharset( $charset ) {
-               if ( method_exists( $this->mConn, 'set_charset' ) ) {
-                       return $this->mConn->set_charset( $charset );
+               $conn = $this->getBindingHandle();
+
+               if ( method_exists( $conn, 'set_charset' ) ) {
+                       return $conn->set_charset( $charset );
                } else {
                        return $this->query( 'SET NAMES ' . $charset, __METHOD__ );
                }
@@ -127,14 +142,18 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return bool
         */
        protected function closeConnection() {
-               return $this->mConn->close();
+               $conn = $this->getBindingHandle();
+
+               return $conn->close();
        }
 
        /**
         * @return int
         */
        function insertId() {
-               return $this->mConn->insert_id;
+               $conn = $this->getBindingHandle();
+
+               return (int)$conn->insert_id;
        }
 
        /**
@@ -152,7 +171,9 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return int
         */
        function affectedRows() {
-               return $this->mConn->affected_rows;
+               $conn = $this->getBindingHandle();
+
+               return $conn->affected_rows;
        }
 
        /**
@@ -160,9 +181,11 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return bool
         */
        function selectDB( $db ) {
+               $conn = $this->getBindingHandle();
+
                $this->mDBname = $db;
 
-               return $this->mConn->select_db( $db );
+               return $conn->select_db( $db );
        }
 
        /**
@@ -224,11 +247,18 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         */
        protected function mysqlFetchField( $res, $n ) {
                $field = $res->fetch_field_direct( $n );
+
+               // Add missing properties to result (using flags property)
+               // which will be part of function mysql-fetch-field for backward compatibility
                $field->not_null = $field->flags & MYSQLI_NOT_NULL_FLAG;
                $field->primary_key = $field->flags & MYSQLI_PRI_KEY_FLAG;
                $field->unique_key = $field->flags & MYSQLI_UNIQUE_KEY_FLAG;
                $field->multiple_key = $field->flags & MYSQLI_MULTIPLE_KEY_FLAG;
                $field->binary = $field->flags & MYSQLI_BINARY_FLAG;
+               $field->numeric = $field->flags & MYSQLI_NUM_FLAG;
+               $field->blob = $field->flags & MYSQLI_BLOB_FLAG;
+               $field->unsigned = $field->flags & MYSQLI_UNSIGNED_FLAG;
+               $field->zerofill = $field->flags & MYSQLI_ZEROFILL_FLAG;
 
                return $field;
        }
@@ -282,11 +312,9 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return string
         */
        protected function mysqlRealEscapeString( $s ) {
-               return $this->mConn->real_escape_string( $s );
-       }
+               $conn = $this->getBindingHandle();
 
-       protected function mysqlPing() {
-               return $this->mConn->ping();
+               return $conn->real_escape_string( $s );
        }
 
        /**
@@ -296,7 +324,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return string
         */
        public function __toString() {
-               if ( $this->mConn instanceof Mysqli ) {
+               if ( $this->mConn instanceof mysqli ) {
                        return (string)$this->mConn->thread_id;
                } else {
                        // mConn might be false or something.