X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/f9001779751f83dc8a10e478bfecb4d8dd5f964c..refs/tags/wordpress-3.5.2:/wp-includes/wp-db.php diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php index e9b4e6fb..4fc829fb 100644 --- a/wp-includes/wp-db.php +++ b/wp-includes/wp-db.php @@ -39,9 +39,8 @@ define( 'ARRAY_N', 'ARRAY_N' ); * * It is possible to replace this class with your own * by setting the $wpdb global variable in wp-content/db.php - * file with your class. You can name it wpdb also, since - * this file will not be included, if the other file is - * available. + * file to your class. The wpdb class will still be included, + * so you can extend it or simply use your own. * * @link http://codex.wordpress.org/Function_Reference/wpdb_Class * @@ -72,9 +71,7 @@ class wpdb { /** * The last error during query. * - * @see get_last_error() * @since 2.5.0 - * @access private * @var string */ var $last_error = ''; @@ -91,7 +88,7 @@ class wpdb { /** * Count of rows returned by previous query * - * @since 1.2.0 + * @since 0.71 * @access private * @var int */ @@ -116,9 +113,9 @@ class wpdb { var $insert_id = 0; /** - * Saved result of the last query made + * Last query made * - * @since 1.2.0 + * @since 0.71 * @access private * @var array */ @@ -127,20 +124,29 @@ class wpdb { /** * Results of the last query made * - * @since 1.0.0 + * @since 0.71 * @access private * @var array|null */ var $last_result; + /** + * MySQL result, which is either a resource or boolean. + * + * @since 0.71 + * @access protected + * @var mixed + */ + protected $result; + /** * Saved info on the table column * - * @since 1.2.0 - * @access private + * @since 0.71 + * @access protected * @var array */ - var $col_info; + protected $col_info; /** * Saved queries that were executed @@ -158,7 +164,7 @@ class wpdb { * in a single database. The second reason is for possible * security precautions. * - * @since 0.71 + * @since 2.5.0 * @access private * @var string */ @@ -167,7 +173,7 @@ class wpdb { /** * Whether the database queries are ready to start executing. * - * @since 2.5.0 + * @since 2.3.2 * @access private * @var bool */ @@ -407,9 +413,10 @@ class wpdb { * Keys are column names, values are format types: 'ID' => '%d' * * @since 2.8.0 - * @see wpdb:prepare() - * @see wpdb:insert() - * @see wpdb:update() + * @see wpdb::prepare() + * @see wpdb::insert() + * @see wpdb::update() + * @see wpdb::delete() * @see wp_set_wpdb_vars() * @access public * @var array @@ -447,10 +454,46 @@ class wpdb { * Database Username * * @since 2.9.0 - * @access private + * @access protected + * @var string + */ + protected $dbuser; + + /** + * Database Password + * + * @since 3.1.0 + * @access protected + * @var string + */ + protected $dbpassword; + + /** + * Database Name + * + * @since 3.1.0 + * @access protected + * @var string + */ + protected $dbname; + + /** + * Database Host + * + * @since 3.1.0 + * @access protected * @var string */ - var $dbuser; + protected $dbhost; + + /** + * Database Handle + * + * @since 0.71 + * @access protected + * @var string + */ + protected $dbh; /** * A textual description of the last query/get_row/get_var call @@ -462,21 +505,18 @@ class wpdb { var $func_call; /** - * Connects to the database server and selects a database + * Whether MySQL is used as the database engine. * - * PHP4 compatibility layer for calling the PHP5 constructor. + * Set in WPDB::db_connect() to true, by default. This is used when checking + * against the required MySQL version for WordPress. Normally, a replacement + * database drop-in (db.php) will skip these checks, but setting this to true + * will force the checks to occur. * - * @uses wpdb::__construct() Passes parameters and returns result - * @since 0.71 - * - * @param string $dbuser MySQL database user - * @param string $dbpassword MySQL database password - * @param string $dbname MySQL database name - * @param string $dbhost MySQL database host + * @since 3.3.0 + * @access public + * @var bool */ - function wpdb( $dbuser, $dbpassword, $dbname, $dbhost ) { - return $this->__construct( $dbuser, $dbpassword, $dbname, $dbhost ); - } + public $is_mysql = null; /** * Connects to the database server and selects a database @@ -494,7 +534,7 @@ class wpdb { * @param string $dbhost MySQL database host */ function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) { - register_shutdown_function( array( &$this, '__destruct' ) ); + register_shutdown_function( array( $this, '__destruct' ) ); if ( WP_DEBUG ) $this->show_errors(); @@ -520,6 +560,57 @@ class wpdb { return true; } + /** + * PHP5 style magic getter, used to lazy-load expensive data. + * + * @since 3.5.0 + * + * @param string $name The private member to get, and optionally process + * @return mixed The private member + */ + function __get( $name ) { + if ( 'col_info' == $name ) + $this->load_col_info(); + + return $this->$name; + } + + /** + * Magic function, for backwards compatibility + * + * @since 3.5.0 + * + * @param string $name The private member to set + * @param mixed $value The value to set + */ + function __set( $name, $value ) { + $this->$name = $value; + } + + /** + * Magic function, for backwards compatibility + * + * @since 3.5.0 + * + * @param string $name The private member to check + * + * @return bool If the member is set or not + */ + function __isset( $name ) { + return isset( $this->$name ); + } + + /** + * Magic function, for backwards compatibility + * + * @since 3.5.0 + * + * @param string $name The private member to unset + */ + function __unset( $name ) { + unset( $this->$name ); + } + /** * Set $this->charset and $this->collate * @@ -573,12 +664,13 @@ class wpdb { * @since 2.5.0 * * @param string $prefix Alphanumeric name for the new prefix. + * @param bool $set_table_names Optional. Whether the table names, e.g. wpdb::$posts, should be updated or not. * @return string|WP_Error Old prefix or WP_Error on error */ function set_prefix( $prefix, $set_table_names = true ) { if ( preg_match( '|[^a-z0-9_]|i', $prefix ) ) - return new WP_Error('invalid_db_prefix', /*WP_I18N_DB_BAD_PREFIX*/'Invalid database prefix'/*/WP_I18N_DB_BAD_PREFIX*/); + return new WP_Error('invalid_db_prefix', 'Invalid database prefix' ); $old_prefix = is_multisite() ? '' : $prefix; @@ -644,6 +736,7 @@ class wpdb { if ( is_multisite() ) { if ( null === $blog_id ) $blog_id = $this->blogid; + $blog_id = (int) $blog_id; if ( defined( 'MULTISITE' ) && ( 0 == $blog_id || 1 == $blog_id ) ) return $this->base_prefix; else @@ -657,7 +750,7 @@ class wpdb { * Returns an array of WordPress tables. * * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to - * override the WordPress users and usersmeta tables that would otherwise + * override the WordPress users and usermeta tables that would otherwise * be determined by the prefix. * * The scope argument can take one of the following: @@ -743,20 +836,21 @@ class wpdb { * @param resource $dbh Optional link identifier. * @return null Always null. */ - function select( $db, $dbh = null) { + function select( $db, $dbh = null ) { if ( is_null($dbh) ) $dbh = $this->dbh; if ( !@mysql_select_db( $db, $dbh ) ) { $this->ready = false; - $this->bail( sprintf( /*WP_I18N_DB_SELECT_DB*/'

Can’t select database

+ wp_load_translations_early(); + $this->bail( sprintf( __( '

Can’t select database

We were able to connect to the database server (which means your username and password is okay) but not able to select the %1$s database.

-

If you don\'t know how to set up a database you should contact your host. If all else fails you may find help at the WordPress Support Forums.

'/*/WP_I18N_DB_SELECT_DB*/, $db, $this->dbuser ), 'db_select_fail' ); +

If you don\'t know how to set up a database you should contact your host. If all else fails you may find help at the WordPress Support Forums.

' ), htmlspecialchars( $db, ENT_QUOTES ), htmlspecialchars( $this->dbuser, ENT_QUOTES ) ), 'db_select_fail' ); return; } } @@ -852,21 +946,23 @@ class wpdb { * @return void */ function escape_by_ref( &$string ) { - $string = $this->_real_escape( $string ); + if ( ! is_float( $string ) ) + $string = $this->_real_escape( $string ); } /** * Prepares a SQL query for safe execution. Uses sprintf()-like syntax. * * The following directives can be used in the query format string: - * %d (decimal number) + * %d (integer) + * %f (float) * %s (string) * %% (literal percentage sign - no argument needed) * - * Both %d and %s are to be left unquoted in the query string and they need an argument passed for them. + * All of %d, %f, and %s are to be left unquoted in the query string and they need an argument passed for them. * Literals (%) as parts of the query must be properly written as %%. * - * This function only supports a small subset of the sprintf syntax; it only supports %d (decimal number), %s (string). + * This function only supports a small subset of the sprintf syntax; it only supports %d (integer), %f (float), and %s (string). * Does not support sign, padding, alignment, width or precision specifiers. * Does not support argument numbering/swapping. * @@ -891,10 +987,13 @@ class wpdb { * @return null|false|string Sanitized query string, null if there is no query, false if there is an error and string * if there was something to prepare */ - function prepare( $query = null ) { // ( $query, *$args ) + function prepare( $query, $args = null ) { if ( is_null( $query ) ) return; + if ( func_num_args() < 2 ) + _doing_it_wrong( 'wpdb::prepare', 'wpdb::prepare() requires at least two arguments.', '3.5' ); + $args = func_get_args(); array_shift( $args ); // If args were passed as an array (as in vsprintf), move them up @@ -902,8 +1001,9 @@ class wpdb { $args = $args[0]; $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting + $query = preg_replace( '|(?suppress_errors ) return false; + wp_load_translations_early(); + if ( $caller = $this->get_caller() ) - $error_str = sprintf( /*WP_I18N_DB_QUERY_ERROR_FULL*/'WordPress database error %1$s for query %2$s made by %3$s'/*/WP_I18N_DB_QUERY_ERROR_FULL*/, $str, $this->last_query, $caller ); + $error_str = sprintf( __( 'WordPress database error %1$s for query %2$s made by %3$s' ), $str, $this->last_query, $caller ); else - $error_str = sprintf( /*WP_I18N_DB_QUERY_ERROR*/'WordPress database error %1$s for query %2$s'/*/WP_I18N_DB_QUERY_ERROR*/, $str, $this->last_query ); + $error_str = sprintf( __( 'WordPress database error %1$s for query %2$s' ), $str, $this->last_query ); - if ( function_exists( 'error_log' ) - && ( $log_file = @ini_get( 'error_log' ) ) - && ( 'syslog' == $log_file || @is_writable( $log_file ) ) - ) - @error_log( $error_str ); + error_log( $error_str ); // Are we showing errors? if ( ! $this->show_errors ) @@ -1022,6 +1120,11 @@ class wpdb { $this->last_result = array(); $this->col_info = null; $this->last_query = null; + $this->rows_affected = $this->num_rows = 0; + $this->last_error = ''; + + if ( is_resource( $this->result ) ) + mysql_free_result( $this->result ); } /** @@ -1030,16 +1133,21 @@ class wpdb { * @since 3.0.0 */ function db_connect() { - global $db_list, $global_db_list; + + $this->is_mysql = true; + + $new_link = defined( 'MYSQL_NEW_LINK' ) ? MYSQL_NEW_LINK : true; + $client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0; if ( WP_DEBUG ) { - $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, true ); + $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags ); } else { - $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, true ); + $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags ); } if ( !$this->dbh ) { - $this->bail( sprintf( /*WP_I18N_DB_CONN_ERROR*/" + wp_load_translations_early(); + $this->bail( sprintf( __( "

Error establishing a database connection

This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at %s. This could mean your host's database server is down.

If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

-"/*/WP_I18N_DB_CONN_ERROR*/, $this->dbhost ), 'db_connect_fail' ); +" ), htmlspecialchars( $this->dbhost, ENT_QUOTES ) ), 'db_connect_fail' ); - // If show errors is disabled then we need to die anyway as we don't have a working DB connection - // unless we're trying to test the initial connection, in which case setup-config.php will handle. - if ( defined( 'WP_SETUP_CONFIG' ) ) - return; - - die(); + return; } $this->set_charset( $this->dbh ); @@ -1080,8 +1183,7 @@ class wpdb { return false; // some queries are made before the plugins have been loaded, and thus cannot be filtered with this method - if ( function_exists( 'apply_filters' ) ) - $query = apply_filters( 'query', $query ); + $query = apply_filters( 'query', $query ); $return_val = 0; $this->flush(); @@ -1107,28 +1209,23 @@ class wpdb { return false; } - if ( preg_match( "/^\\s*(insert|delete|update|replace|alter) /i", $query ) ) { + if ( preg_match( '/^\s*(create|alter|truncate|drop)\s/i', $query ) ) { + $return_val = $this->result; + } elseif ( preg_match( '/^\s*(insert|delete|update|replace)\s/i', $query ) ) { $this->rows_affected = mysql_affected_rows( $this->dbh ); // Take note of the insert_id - if ( preg_match( "/^\\s*(insert|replace) /i", $query ) ) { + if ( preg_match( '/^\s*(insert|replace)\s/i', $query ) ) { $this->insert_id = mysql_insert_id($this->dbh); } // Return number of rows affected $return_val = $this->rows_affected; } else { - $i = 0; - 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 = $num_rows; @@ -1154,7 +1251,7 @@ class wpdb { * @param string $table table name * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. - * A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. + * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. * @return int|false The number of rows inserted, or false on error. */ function insert( $table, $data, $format = null ) { @@ -1177,7 +1274,7 @@ class wpdb { * @param string $table table name * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. - * A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. + * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. * @return int|false The number of rows affected, or false on error. */ function replace( $table, $data, $format = null ) { @@ -1196,14 +1293,16 @@ class wpdb { * @see wp_set_wpdb_vars() * * @param string $table table name - * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). + * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. - * A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. + * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. + * @param string $type Optional. What type of operation is this? INSERT or REPLACE. Defaults to INSERT. * @return int|false The number of rows affected, or false on error. */ function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) { if ( ! in_array( strtoupper( $type ), array( 'REPLACE', 'INSERT' ) ) ) return false; + $this->insert_id = 0; $formats = $format = (array) $format; $fields = array_keys( $data ); $formatted_fields = array(); @@ -1216,7 +1315,7 @@ class wpdb { $form = '%s'; $formatted_fields[] = $form; } - $sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES ('" . implode( "','", $formatted_fields ) . "')"; + $sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES (" . implode( ",", $formatted_fields ) . ")"; return $this->query( $this->prepare( $sql, $data ) ); } @@ -1237,8 +1336,8 @@ class wpdb { * @param array $data Data to update (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be "raw". * @param array|string $format Optional. An array of formats to be mapped to each of the values in $data. If string, that format will be used for all of the values in $data. - * A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. - * @param array|string $format_where Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $where will be treated as strings. + * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. + * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings. * @return int|false The number of rows updated, or false on error. */ function update( $table, $data, $where, $format = null, $where_format = null ) { @@ -1272,6 +1371,49 @@ class wpdb { return $this->query( $this->prepare( $sql, array_merge( array_values( $data ), array_values( $where ) ) ) ); } + /** + * Delete a row in the table + * + * + * wpdb::delete( 'table', array( 'ID' => 1 ) ) + * wpdb::delete( 'table', array( 'ID' => 1 ), array( '%d' ) ) + * + * + * @since 3.4.0 + * @see wpdb::prepare() + * @see wpdb::$field_types + * @see wp_set_wpdb_vars() + * + * @param string $table table name + * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be "raw". + * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings unless otherwise specified in wpdb::$field_types. + * @return int|false The number of rows updated, or false on error. + */ + function delete( $table, $where, $where_format = null ) { + if ( ! is_array( $where ) ) + return false; + + $bits = $wheres = array(); + + $where_formats = $where_format = (array) $where_format; + + foreach ( array_keys( $where ) as $field ) { + if ( !empty( $where_format ) ) { + $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0]; + } elseif ( isset( $this->field_types[ $field ] ) ) { + $form = $this->field_types[ $field ]; + } else { + $form = '%s'; + } + + $wheres[] = "$field = $form"; + } + + $sql = "DELETE FROM $table WHERE " . implode( ' AND ', $wheres ); + return $this->query( $this->prepare( $sql, $where ) ); + } + + /** * Retrieve one variable from the database. * @@ -1282,8 +1424,8 @@ class wpdb { * @since 0.71 * * @param string|null $query Optional. SQL query. Defaults to null, use the result from the previous query. - * @param int $x Optional. Column of value to return. Indexed from 0. - * @param int $y Optional. Row of value to return. Indexed from 0. + * @param int $x Optional. Column of value to return. Indexed from 0. + * @param int $y Optional. Row of value to return. Indexed from 0. * @return string|null Database query result (as string), or null on failure */ function get_var( $query = null, $x = 0, $y = 0 ) { @@ -1311,7 +1453,7 @@ class wpdb { * @param string $output Optional. one of ARRAY_A | ARRAY_N | OBJECT constants. Return an associative array (column => value, ...), * a numerically indexed array (0 => value, ...) or an object ( ->column = value ), respectively. * @param int $y Optional. Row to return. Indexed from 0. - * @return mixed Database query result in format specifed by $output or null on failure + * @return mixed Database query result in format specified by $output or null on failure */ function get_row( $query = null, $output = OBJECT, $y = 0 ) { $this->func_call = "\$db->get_row(\"$query\",$output,$y)"; @@ -1330,7 +1472,7 @@ class wpdb { } elseif ( $output == ARRAY_N ) { 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*/); + $this->print_error( " \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N" ); } } @@ -1369,7 +1511,7 @@ class wpdb { * @param string $query SQL query. * @param string $output Optional. Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K constants. With one of the first three, return an array of rows indexed from 0 by SQL result row number. * Each row is an associative array (column => value, ...), a numerically indexed array (0 => value, ...), or an object. ( ->column = value ), respectively. - * With OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value. Duplicate keys are discarded. + * With OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value. Duplicate keys are discarded. * @return mixed Database query results */ function get_results( $query = null, $output = OBJECT ) { @@ -1388,7 +1530,8 @@ class wpdb { // Return an array of row objects with keys from column 1 // (Duplicates are discarded) foreach ( $this->last_result as $row ) { - $key = array_shift( $var_by_ref = get_object_vars( $row ) ); + $var_by_ref = get_object_vars( $row ); + $key = array_shift( $var_by_ref ); if ( ! isset( $new_array[ $key ] ) ) $new_array[ $key ] = $row; } @@ -1411,6 +1554,22 @@ class wpdb { return null; } + /** + * Load the column metadata from the last query. + * + * @since 3.5.0 + * + * @access protected + */ + protected function load_col_info() { + if ( $this->col_info ) + return; + + for ( $i = 0; $i < @mysql_num_fields( $this->result ); $i++ ) { + $this->col_info[ $i ] = @mysql_fetch_field( $this->result, $i ); + } + } + /** * Retrieve column metadata from the last query. * @@ -1421,6 +1580,8 @@ class wpdb { * @return mixed Column Results */ function get_col_info( $info_type = 'name', $col_offset = -1 ) { + $this->load_col_info(); + if ( $this->col_info ) { if ( $col_offset == -1 ) { $i = 0; @@ -1444,8 +1605,7 @@ class wpdb { * @return true */ function timer_start() { - $mtime = explode( ' ', microtime() ); - $this->time_start = $mtime[1] + $mtime[0]; + $this->time_start = microtime( true ); return true; } @@ -1454,19 +1614,16 @@ class wpdb { * * @since 1.5.0 * - * @return int Total time spent on the query, in milliseconds + * @return float Total time spent on the query, in seconds */ function timer_stop() { - $mtime = explode( ' ', microtime() ); - $time_end = $mtime[1] + $mtime[0]; - $time_total = $time_end - $this->time_start; - return $time_total; + return ( microtime( true ) - $this->time_start ); } /** * Wraps errors in a nice header and footer and dies. * - * Will not die if wpdb::$show_errors is true + * Will not die if wpdb::$show_errors is false. * * @since 1.5.0 * @@ -1507,13 +1664,34 @@ class wpdb { * Called when WordPress is generating the table scheme. * * @since 2.5.0 + * @deprecated 3.5.0 + * @deprecated Use wpdb::has_cap( 'collation' ) * * @return bool True if collation is supported, false if version does not */ function supports_collation() { + _deprecated_function( __FUNCTION__, '3.5', 'wpdb::has_cap( \'collation\' )' ); return $this->has_cap( 'collation' ); } + /** + * The database character collate. + * + * @since 3.5.0 + * + * @return string The database character collate. + */ + public function get_charset_collate() { + $charset_collate = ''; + + if ( ! empty( $this->charset ) ) + $charset_collate = "DEFAULT CHARACTER SET $this->charset"; + if ( ! empty( $this->collate ) ) + $charset_collate .= " COLLATE $this->collate"; + + return $charset_collate; + } + /** * Determine if a database supports a particular feature * @@ -1549,16 +1727,7 @@ class wpdb { * @return string The name of the calling function */ function get_caller() { - $trace = array_reverse( debug_backtrace() ); - $caller = array(); - - foreach ( $trace as $call ) { - if ( isset( $call['class'] ) && __CLASS__ == $call['class'] ) - continue; // Filter out wpdb calls. - $caller[] = isset( $call['class'] ) ? "{$call['class']}->{$call['function']}" : $call['function']; - } - - return join( ', ', $caller ); + return wp_debug_backtrace_summary( __CLASS__ ); } /** @@ -1572,5 +1741,3 @@ class wpdb { return preg_replace( '/[^0-9.].*/', '', mysql_get_server_info( $this->dbh ) ); } } - -?>