diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php index 8e58009f3..1ab78a397 100644 --- a/wp-includes/wp-db.php +++ b/wp-includes/wp-db.php @@ -125,13 +125,13 @@ class wpdb { var $last_query; /** - * MySQL result resource of the last query made + * Results of the last query made * - * @since 3.1.0 + * @since 1.0.0 * @access private - * @var resource|null + * @var array|null */ - var $_mysql_last_result; + var $last_result; /** * Saved info on the table column @@ -1015,8 +1015,7 @@ class wpdb { * @return void */ function flush() { - if ( is_resource( $this->_mysql_last_result ) ) - mysql_free_result( $this->_mysql_last_result ); + $this->last_result = array(); $this->col_info = null; $this->last_query = null; } @@ -1086,7 +1085,7 @@ class wpdb { if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) $this->timer_start(); - $this->_mysql_last_result = @mysql_query( $query, $this->dbh ); + $this->result = @mysql_query( $query, $this->dbh ); $this->num_queries++; if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) @@ -1108,15 +1107,22 @@ class wpdb { $return_val = $this->rows_affected; } else { $i = 0; - while ( $i < @mysql_num_fields( $this->_mysql_last_result ) ) { - $this->col_info[$i] = @mysql_fetch_field( $this->_mysql_last_result ); + while ( $i < @mysql_num_fields( $this->result ) ) { + $this->col_info[$i] = @mysql_fetch_field( $this->result ); $i++; } + $num_rows = 0; + while ( $row = @mysql_fetch_object( $this->result ) ) { + $this->last_result[$num_rows] = $row; + $num_rows++; + } + + @mysql_free_result( $this->result ); // Log number of rows the query returned // and return number of rows selected - $this->num_rows = @mysql_num_rows( $this->_mysql_last_result ); - $return_val = $this->num_rows; + $this->num_rows = $num_rows; + $return_val = $num_rows; } return $return_val; @@ -1275,10 +1281,9 @@ class wpdb { if ( $query ) $this->query( $query ); - // Extract var from result resource based x,y vals - if ( $this->num_rows > $y ) { - @mysql_data_seek( $this->_mysql_last_result, $y ); - $values = @mysql_fetch_row( $this->_mysql_last_result ); + // Extract var out of cached results based x,y vals + if ( !empty( $this->last_result[$y] ) ) { + $values = array_values( get_object_vars( $this->last_result[$y] ) ); } // If there is a value return it else return null @@ -1305,17 +1310,15 @@ class wpdb { else return null; - if ( $this->num_rows <= $y ) + if ( !isset( $this->last_result[$y] ) ) return null; - @mysql_data_seek( $this->_mysql_last_result, $y ); - if ( $output == OBJECT ) { - return @mysql_fetch_object( $this->_mysql_last_result ); + return $this->last_result[$y] ? $this->last_result[$y] : null; } elseif ( $output == ARRAY_A ) { - return @mysql_fetch_assoc( $this->_mysql_last_result ); + return $this->last_result[$y] ? get_object_vars( $this->last_result[$y] ) : null; } elseif ( $output == ARRAY_N ) { - return @mysql_fetch_row( $this->_mysql_last_result ); + return $this->last_result[$y] ? array_values( get_object_vars( $this->last_result[$y] ) ) : null; } else { $this->print_error(/*WP_I18N_DB_GETROW_ERROR*/" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"/*/WP_I18N_DB_GETROW_ERROR*/); } @@ -1340,13 +1343,8 @@ class wpdb { $new_array = array(); // Extract the column values - @mysql_data_seek( $this->_mysql_last_result, 0 ); - for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { - $values = @mysql_fetch_row( $this->_mysql_last_result ); - if ( isset( $values[$x] ) && $values[$x] !== '' ) - $new_array[$i] = $values[$x]; - else - $new_array[$i] = null; + for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) { + $new_array[$i] = $this->get_var( null, $x, $i ); } return $new_array; } @@ -1373,32 +1371,30 @@ class wpdb { return null; $new_array = array(); - @mysql_data_seek( $this->_mysql_last_result, 0 ); if ( $output == OBJECT ) { // Return an integer-keyed array of row objects - for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { - $new_array[] = @mysql_fetch_object( $this->_mysql_last_result ); - } - return $new_array; + return $this->last_result; } elseif ( $output == OBJECT_K ) { // Return an array of row objects with keys from column 1 // (Duplicates are discarded) - while ( $row = @mysql_fetch_object( $this->_mysql_last_result ) ) { + foreach ( $this->last_result as $row ) { $key = array_shift( $var_by_ref = get_object_vars( $row ) ); if ( ! isset( $new_array[ $key ] ) ) $new_array[ $key ] = $row; } return $new_array; - } elseif ( $output == ARRAY_A ) { - // Return an integer-keyed array of column name-keyed row arrays - for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { - $new_array[] = @mysql_fetch_assoc( $this->_mysql_last_result ); - } - return $new_array; - } elseif ( $output == ARRAY_N ) { - // Return an integer-keyed array of integer-keyed row arrays - for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { - $new_array[] = @mysql_fetch_row( $this->_mysql_last_result ); + } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { + // Return an integer-keyed array of... + if ( $this->last_result ) { + foreach( (array) $this->last_result as $row ) { + if ( $output == ARRAY_N ) { + // ...integer-keyed row arrays + $new_array[] = array_values( get_object_vars( $row ) ); + } else { + // ...column name-keyed row arrays + $new_array[] = get_object_vars( $row ); + } + } } return $new_array; } @@ -1563,20 +1559,6 @@ class wpdb { function db_version() { return preg_replace( '/[^0-9.].*/', '', mysql_get_server_info( $this->dbh ) ); } - - /** - * Magic getter used for the deprecated last_result property. - * - * @since 3.1.0 - * @access private - */ - function __get( $name ) { - if ( 'last_result' == $name ) { - _deprecated_argument( 'wpdb', '3.1', __( 'The last_result property is deprecated. Use $wpdb->get_result().' ) ); - return $this->get_results(); - } - return null; - } } ?>