Make WordPress Core

Ticket #21663: 21663.3.diff

File 21663.3.diff, 6.9 KB (added by aaroncampbell, 10 years ago)
  • src/wp-includes/wp-db.php

     
    510510        public $is_mysql = null;
    511511
    512512        /**
     513         * Whether to use mysqli over mysql.
     514         *
     515         * @since 3.8.0
     516         * @access private
     517         * @var bool
     518         */
     519        private $use_mysqli = false;
     520
     521        /**
    513522         * Connects to the database server and selects a database
    514523         *
    515524         * PHP5 style constructor for compatibility with PHP5. Does
     
    530539                if ( WP_DEBUG && WP_DEBUG_DISPLAY )
    531540                        $this->show_errors();
    532541
     542                $this->use_mysqli = apply_filters( 'use_mysqli', version_compare( phpversion(), '5.5', '>=' ) && function_exists( 'mysqli_connect' ) );
     543
    533544                $this->init_charset();
    534545
    535546                $this->dbuser = $dbuser;
     
    637648                if ( ! isset( $collate ) )
    638649                        $collate = $this->collate;
    639650                if ( $this->has_cap( 'collation' ) && ! empty( $charset ) ) {
    640                         if ( function_exists( 'mysql_set_charset' ) && $this->has_cap( 'set_charset' ) ) {
    641                                 mysql_set_charset( $charset, $dbh );
     651                        if ( $this->use_mysqli ) {
     652                                        mysqli_set_charset( $dbh, $charset );
    642653                        } else {
    643                                 $query = $this->prepare( 'SET NAMES %s', $charset );
    644                                 if ( ! empty( $collate ) )
    645                                         $query .= $this->prepare( ' COLLATE %s', $collate );
    646                                 mysql_query( $query, $dbh );
     654                                if ( function_exists( 'mysql_set_charset' ) && $this->has_cap( 'set_charset' ) ) {
     655                                        mysql_set_charset( $charset, $dbh );
     656                                } else {
     657                                        $query = $this->prepare( 'SET NAMES %s', $charset );
     658                                        if ( ! empty( $collate ) )
     659                                                $query .= $this->prepare( ' COLLATE %s', $collate );
     660                                        mysql_query( $query, $dbh );
     661                                }
    647662                        }
    648663                }
    649664        }
     
    830845                if ( is_null($dbh) )
    831846                        $dbh = $this->dbh;
    832847
    833                 if ( !@mysql_select_db( $db, $dbh ) ) {
     848                $success = ( $this->use_mysqli )? @mysqli_select_db( $dbh, $db ) : @mysql_select_db( $db, $dbh );
     849                if ( ! $success ) {
    834850                        $this->ready = false;
    835851                        wp_load_translations_early();
    836852                        $this->bail( sprintf( __( '<h1>Can&#8217;t select database</h1>
     
    866882        }
    867883
    868884        /**
    869          * Real escape, using mysql_real_escape_string()
     885         * Real escape, using mysqli_real_escape_string() or mysql_real_escape_string()
    870886         *
     887         * @see mysqli_real_escape_string()
    871888         * @see mysql_real_escape_string()
    872889         * @since 2.8.0
    873890         * @access private
     
    877894         */
    878895        function _real_escape( $string ) {
    879896                if ( $this->dbh )
    880                         return mysql_real_escape_string( $string, $this->dbh );
     897                        return ( $this->use_mysqli )? mysqli_real_escape_string( $this->dbh, $string ) : mysql_real_escape_string( $string, $this->dbh );
    881898
    882899                $class = get_class( $this );
    883900                _doing_it_wrong( $class, "$class must set a database connection for use with escaping.", E_USER_NOTICE );
     
    10191036                global $EZSQL_ERROR;
    10201037
    10211038                if ( !$str )
    1022                         $str = mysql_error( $this->dbh );
     1039                        $str = ( $this->use_mysqli )? mysqli_error( $this->dbh ) : mysql_error( $this->dbh );
    10231040                $EZSQL_ERROR[] = array( 'query' => $this->last_query, 'error_str' => $str );
    10241041
    10251042                if ( $this->suppress_errors )
     
    11221139                $this->rows_affected = $this->num_rows = 0;
    11231140                $this->last_error  = '';
    11241141
    1125                 if ( is_resource( $this->result ) )
    1126                         mysql_free_result( $this->result );
     1142                if ( is_resource( $this->result ) ) {
     1143                        if ( $this->use_mysqli ) {
     1144                                mysqli_free_result( $this->result );
     1145                        } else {
     1146                                mysql_free_result( $this->result );
     1147                        }
     1148                }
    11271149        }
    11281150
    11291151        /**
     
    11391161                $client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0;
    11401162
    11411163                if ( WP_DEBUG ) {
    1142                         $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
     1164                        if ( $this->use_mysqli ) {
     1165                                $this->dbh = mysqli_connect( $this->dbhost, $this->dbuser, $this->dbpassword );
     1166                        } else {
     1167                                $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
     1168                        }
    11431169                } else {
    1144                         $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
     1170                        if ( $this->use_mysqli ) {
     1171                                $this->dbh = @mysqli_connect( $this->dbhost, $this->dbuser, $this->dbpassword );
     1172                        } else {
     1173                                $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
     1174                        }
    11451175                }
    11461176
    11471177                if ( !$this->dbh ) {
     
    12021232                if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
    12031233                        $this->timer_start();
    12041234
    1205                 $this->result = @mysql_query( $query, $this->dbh );
     1235                $this->result = ( $this->use_mysqli )? @mysqli_query( $this->dbh, $query ) : @mysql_query( $query, $this->dbh );
    12061236                $this->num_queries++;
    12071237
    12081238                if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
    12091239                        $this->queries[] = array( $query, $this->timer_stop(), $this->get_caller() );
    12101240
    12111241                // If there is an error then take note of it..
    1212                 if ( $this->last_error = mysql_error( $this->dbh ) ) {
     1242                if ( $this->last_error = ( $this->use_mysqli )? mysqli_error( $this->dbh ) : mysql_error( $this->dbh ) ) {
    12131243                        // Clear insert_id on a subsequent failed insert.
    12141244                        if ( $this->insert_id && preg_match( '/^\s*(insert|replace)\s/i', $query ) )
    12151245                                $this->insert_id = 0;
     
    12211251                if ( preg_match( '/^\s*(create|alter|truncate|drop)\s/i', $query ) ) {
    12221252                        $return_val = $this->result;
    12231253                } elseif ( preg_match( '/^\s*(insert|delete|update|replace)\s/i', $query ) ) {
    1224                         $this->rows_affected = mysql_affected_rows( $this->dbh );
     1254                        $this->rows_affected = ( $this->use_mysqli )? mysqli_affected_rows( $this->dbh ) : mysql_affected_rows( $this->dbh );
    12251255                        // Take note of the insert_id
    12261256                        if ( preg_match( '/^\s*(insert|replace)\s/i', $query ) ) {
    1227                                 $this->insert_id = mysql_insert_id($this->dbh);
     1257                                $this->insert_id = ( $this->use_mysqli )? mysqli_insert_id( $this->dbh ) : mysql_insert_id( $this->dbh );
    12281258                        }
    12291259                        // Return number of rows affected
    12301260                        $return_val = $this->rows_affected;
    12311261                } else {
    12321262                        $num_rows = 0;
    1233                         while ( $row = @mysql_fetch_object( $this->result ) ) {
     1263                        while ( $row = ( $this->use_mysqli )? @mysqli_fetch_object( $this->result ) : @mysql_fetch_object( $this->result ) ) {
    12341264                                $this->last_result[$num_rows] = $row;
    12351265                                $num_rows++;
    12361266                        }
     
    15741604                if ( $this->col_info )
    15751605                        return;
    15761606
    1577                 for ( $i = 0; $i < @mysql_num_fields( $this->result ); $i++ ) {
    1578                         $this->col_info[ $i ] = @mysql_fetch_field( $this->result, $i );
     1607                $num_fields = ( $this->use_mysqli )? @mysqli_num_fields( $this->result ) : @mysql_num_fields( $this->result );
     1608                for ( $i = 0; $i < $num_fields; $i++ ) {
     1609                        $this->col_info[ $i ] = ( $this->use_mysqli )? @mysqli_fetch_field( $this->result, $i ) : @mysql_fetch_field( $this->result, $i );
    15791610                }
    15801611        }
    15811612
     
    17471778         * @return false|string false on failure, version number on success
    17481779         */
    17491780        function db_version() {
    1750                 return preg_replace( '/[^0-9.].*/', '', mysql_get_server_info( $this->dbh ) );
     1781                $server_info = ( $this->use_mysqli )? mysqli_get_server_info( $this->dbh ) : mysql_get_server_info( $this->dbh );
     1782                return preg_replace( '/[^0-9.].*/', '', $server_info );
    17511783        }
    17521784}