WordPress.org

Make WordPress Core

Ticket #12257: 12257.mysqli.diff

File 12257.mysqli.diff, 7.2 KB (added by sc0ttkclark, 5 years ago)

Patch for MySQLi and refresh of code

  • wp-includes/wp-db.php

    diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php
    index 5393240..7cdda3d 100644
    a b class wpdb { 
    126126        var $last_query;
    127127
    128128        /**
    129          * Results of the last query made
    130          *
    131          * @since 0.71
    132          * @access private
    133          * @var array|null
    134          */
    135         var $last_result;
    136 
    137         /**
    138129         * MySQL result, which is either a resource or boolean.
    139130         *
    140131         * @since 0.71
    public function suppress_errors( $suppress = true ) { 
    13601351         * @return void
    13611352         */
    13621353        public function flush() {
    1363                 $this->last_result = array();
    13641354                $this->col_info    = null;
    13651355                $this->last_query  = null;
    13661356                $this->rows_affected = $this->num_rows = 0;
    public function query( $query ) { 
    16911681                } else {
    16921682                        $num_rows = 0;
    16931683                        if ( $this->use_mysqli && $this->result instanceof mysqli_result ) {
    1694                                 while ( $row = @mysqli_fetch_object( $this->result ) ) {
    1695                                         $this->last_result[$num_rows] = $row;
    1696                                         $num_rows++;
    1697                                 }
     1684                                $num_rows = @mysql_num_rows( $this->result );
    16981685                        } elseif ( is_resource( $this->result ) ) {
    1699                                 while ( $row = @mysql_fetch_object( $this->result ) ) {
    1700                                         $this->last_result[$num_rows] = $row;
    1701                                         $num_rows++;
    1702                                 }
     1686                                $num_rows = @mysql_num_rows( $this->result );
    17031687                        }
    17041688
    17051689                        // Log number of rows the query returned
    private function _do_query( $query ) { 
    17311715                } else {
    17321716                        $this->result = @mysql_query( $query, $this->dbh );
    17331717                }
     1718               
    17341719                $this->num_queries++;
    17351720
    17361721                if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
    public function get_var( $query = null, $x = 0, $y = 0 ) { 
    20432028                }
    20442029
    20452030                // Extract var out of cached results based x,y vals
    2046                 if ( !empty( $this->last_result[$y] ) ) {
    2047                         $values = array_values( get_object_vars( $this->last_result[$y] ) );
     2031                if ( $y < $this->num_rows ) {
     2032                        if ( $this->use_mysqli ) {
     2033                                @mysqli_data_seek( $this->result, $y );
     2034                                $values = @mysqli_fetch_row( $this->result );
     2035                        } else {
     2036                                @mysql_data_seek( $this->result, $y );
     2037                                $values = @mysql_fetch_row( $this->result );
     2038                        }
    20482039                }
    20492040
    20502041                // If there is a value return it else return null
    public function get_row( $query = null, $output = OBJECT, $y = 0 ) { 
    20722063                        return null;
    20732064                }
    20742065
    2075                 if ( !isset( $this->last_result[$y] ) )
     2066                if ( $this->num_rows <= $y ) {
    20762067                        return null;
     2068                }
     2069               
     2070                if ( $this->use_mysqli ) {
     2071                        @mysqli_data_seek( $this->result, $y );
     2072                } else {
     2073                        @mysql_data_seek( $this->result, $y );
     2074                }
    20772075
    2078                 if ( $output == OBJECT ) {
    2079                         return $this->last_result[$y] ? $this->last_result[$y] : null;
     2076                if ( $output == OBJECT || strtoupper( $output ) === OBJECT ) {
     2077                        if ( $this->use_mysqli ) {
     2078                                return @mysqli_fetch_object( $this->result );
     2079                        } else {
     2080                                return @mysql_fetch_object( $this->result );
     2081                        }
    20802082                } elseif ( $output == ARRAY_A ) {
    2081                         return $this->last_result[$y] ? get_object_vars( $this->last_result[$y] ) : null;
     2083                        if ( $this->use_mysqli ) {
     2084                                return @mysqli_fetch_object( $this->result );
     2085                        } else {
     2086                                return @mysql_fetch_object( $this->result );
     2087                        }
    20822088                } elseif ( $output == ARRAY_N ) {
    2083                         return $this->last_result[$y] ? array_values( get_object_vars( $this->last_result[$y] ) ) : null;
     2089                        if ( $this->use_mysqli ) {
     2090                                return @mysqli_fetch_assoc( $this->result );
     2091                        } else {
     2092                                return @mysql_fetch_assoc( $this->result );
     2093                        }
    20842094                } elseif ( strtoupper( $output ) === OBJECT ) {
    20852095                        // Back compat for OBJECT being previously case insensitive.
    2086                         return $this->last_result[$y] ? $this->last_result[$y] : null;
     2096                        if ( $this->use_mysqli ) {
     2097                                return @mysqli_fetch_row( $this->result );
     2098                        } else {
     2099                                return @mysql_fetch_row( $this->result );
     2100                        }
    20872101                } else {
    20882102                        $this->print_error( " \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N" );
    20892103                }
    public function get_col( $query = null , $x = 0 ) { 
    21082122                }
    21092123
    21102124                $new_array = array();
     2125               
     2126                @mysql_data_seek( $this->result, 0 );
     2127               
    21112128                // Extract the column values
    2112                 for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) {
    2113                         $new_array[$i] = $this->get_var( null, $x, $i );
     2129                for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) {
     2130                        if ( $this->use_mysqli ) {
     2131                                $values = @mysqli_fetch_row( $this->result );
     2132                        } else {
     2133                                $values = @mysql_fetch_row( $this->result );
     2134                        }
     2135                       
     2136                        if ( isset( $values[$x] ) && $values[$x] !== '' ) {
     2137                                $new_array[$i] = $values[$x];
     2138                        } else {
     2139                                $new_array[$i] = null;
     2140                        }
    21142141                }
     2142               
    21152143                return $new_array;
    21162144        }
    21172145
    public function get_results( $query = null, $output = OBJECT ) { 
    21332161
    21342162                if ( $query ) {
    21352163                        $this->query( $query );
    2136                 } else {
    2137                         return null;
    21382164                }
     2165               
     2166                @mysql_data_seek( $this->result, 0 );
    21392167
    21402168                $new_array = array();
    2141                 if ( $output == OBJECT ) {
     2169               
     2170                if ( $output == OBJECT || strtoupper( $output ) === OBJECT ) {
    21422171                        // Return an integer-keyed array of row objects
    2143                         return $this->last_result;
     2172                        for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) {
     2173                                if ( $this->use_mysqli ) {
     2174                                        $new_array[] = @mysqli_fetch_object( $this->result );
     2175                                } else {
     2176                                        $new_array[] = @mysql_fetch_object( $this->result );
     2177                                }
     2178                        }
     2179                       
     2180                        return $new_array;
    21442181                } elseif ( $output == OBJECT_K ) {
    21452182                        // Return an array of row objects with keys from column 1
    21462183                        // (Duplicates are discarded)
    2147                         foreach ( $this->last_result as $row ) {
     2184                        if ( $this->use_mysqi ) {
     2185                                $row = @mysqli_fetch_object( $this->result );
     2186                        } else {
     2187                                $row = @mysql_fetch_object( $this->result );
     2188                        }
     2189                       
     2190                        while ( $row ) {
    21482191                                $var_by_ref = get_object_vars( $row );
    21492192                                $key = array_shift( $var_by_ref );
    2150                                 if ( ! isset( $new_array[ $key ] ) )
     2193                               
     2194                                if ( ! isset( $new_array[ $key ] ) ) {
    21512195                                        $new_array[ $key ] = $row;
     2196                                }
     2197                               
     2198                                if ( $this->use_mysqi ) {
     2199                                        $row = @mysqli_fetch_object( $this->result );
     2200                                } else {
     2201                                        $row = @mysql_fetch_object( $this->result );
     2202                                }
    21522203                        }
     2204                       
    21532205                        return $new_array;
    2154                 } elseif ( $output == ARRAY_A || $output == ARRAY_N ) {
    2155                         // Return an integer-keyed array of...
    2156                         if ( $this->last_result ) {
    2157                                 foreach( (array) $this->last_result as $row ) {
    2158                                         if ( $output == ARRAY_N ) {
    2159                                                 // ...integer-keyed row arrays
    2160                                                 $new_array[] = array_values( get_object_vars( $row ) );
    2161                                         } else {
    2162                                                 // ...column name-keyed row arrays
    2163                                                 $new_array[] = get_object_vars( $row );
    2164                                         }
     2206                } elseif ( $output == ARRAY_A ) {
     2207                        // Return an integer-keyed array of column name-keyed row arrays
     2208                        for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) {
     2209                                if ( $this->use_mysqli ) {
     2210                                        $new_array[] = @mysqli_fetch_assoc( $this->result );
     2211                                } else {
     2212                                        $new_array[] = @mysql_fetch_assoc( $this->result );
    21652213                                }
    21662214                        }
     2215                       
     2216                        return $new_array;
     2217                } elseif ( $output == ARRAY_N ) {
     2218                        // Return an integer-keyed array of integer-keyed row arrays
     2219                        for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) {
     2220                                if ( $this->use_mysqli ) {
     2221                                        $new_array[] = @mysqli_fetch_row( $this->result );
     2222                                } else {
     2223                                        $new_array[] = @mysql_fetch_row( $this->result );
     2224                                }
     2225                        }
     2226                       
    21672227                        return $new_array;
    2168                 } elseif ( strtoupper( $output ) === OBJECT ) {
    2169                         // Back compat for OBJECT being previously case insensitive.
    2170                         return $this->last_result;
    21712228                }
     2229               
    21722230                return null;
    21732231        }
    21742232