diff -r be944660c56a -r 3d72ae0968f4 wp/wp-includes/wp-db.php --- a/wp/wp-includes/wp-db.php Wed Sep 21 18:19:35 2022 +0200 +++ b/wp/wp-includes/wp-db.php Tue Sep 27 16:37:53 2022 +0200 @@ -59,6 +59,7 @@ * Default is to show errors if both WP_DEBUG and WP_DEBUG_DISPLAY evaluate to true. * * @since 0.71 + * * @var bool */ public $show_errors = false; @@ -67,6 +68,7 @@ * Whether to suppress errors during the DB bootstrapping. Default false. * * @since 2.5.0 + * * @var bool */ public $suppress_errors = false; @@ -75,6 +77,7 @@ * The error encountered during the last query. * * @since 2.5.0 + * * @var string */ public $last_error = ''; @@ -83,6 +86,7 @@ * The number of queries made. * * @since 1.2.0 + * * @var int */ public $num_queries = 0; @@ -91,6 +95,7 @@ * Count of rows returned by the last query. * * @since 0.71 + * * @var int */ public $num_rows = 0; @@ -99,6 +104,7 @@ * Count of rows affected by the last query. * * @since 0.71 + * * @var int */ public $rows_affected = 0; @@ -107,6 +113,7 @@ * The ID generated for an AUTO_INCREMENT column by the last query (usually INSERT). * * @since 0.71 + * * @var int */ public $insert_id = 0; @@ -115,6 +122,7 @@ * The last query made. * * @since 0.71 + * * @var string */ public $last_query; @@ -123,15 +131,26 @@ * Results of the last query. * * @since 0.71 - * @var array|null + * + * @var stdClass[]|null */ public $last_result; /** - * MySQL result, which is either a resource or boolean. + * Database query result. + * + * Possible values: + * + * - For successful SELECT, SHOW, DESCRIBE, or EXPLAIN queries: + * - `mysqli_result` instance when the `mysqli` driver is in use + * - `resource` when the older `mysql` driver is in use + * - `true` for other query types that were successful + * - `null` if a query is yet to be made or if the result has since been flushed + * - `false` if the query returned an error * * @since 0.71 - * @var mixed + * + * @var mysqli_result|resource|bool|null */ protected $result; @@ -139,22 +158,25 @@ * Cached column info, for sanity checking data before inserting. * * @since 4.2.0 + * * @var array */ protected $col_meta = array(); /** - * Calculated character sets on tables. + * Calculated character sets keyed by table name. * * @since 4.2.0 - * @var array + * + * @var string[] */ protected $table_charset = array(); /** - * Whether text fields in the current query need to be sanity checked. Default false. + * Whether text fields in the current query need to be sanity checked. * * @since 4.2.0 + * * @var bool */ protected $check_current_query = true; @@ -163,6 +185,7 @@ * Flag to ensure we don't run into recursion problems when checking the collation. * * @since 4.2.0 + * * @see wpdb::check_safe_collation() * @var bool */ @@ -172,6 +195,7 @@ * Saved info on the table column. * * @since 0.71 + * * @var array */ protected $col_info; @@ -185,7 +209,7 @@ * @since 5.3.0 The fifth element in each query log was added to record custom data. * * @var array[] { - * Array of queries that were executed. + * Array of arrays containing information about queries that were executed. * * @type array ...$0 { * Data for each query. @@ -204,18 +228,20 @@ * The number of times to retry reconnecting before dying. Default 5. * * @since 3.9.0 + * * @see wpdb::check_connection() * @var int */ protected $reconnect_retries = 5; /** - * WordPress table prefix + * WordPress table prefix. * * You can set this to have multiple WordPress installations in a single database. * The second reason is for possible security precautions. * * @since 2.5.0 + * * @var string */ public $prefix = ''; @@ -224,6 +250,7 @@ * WordPress base table prefix. * * @since 3.0.0 + * * @var string */ public $base_prefix; @@ -232,6 +259,7 @@ * Whether the database queries are ready to start executing. * * @since 2.3.2 + * * @var bool */ public $ready = false; @@ -240,6 +268,7 @@ * Blog ID. * * @since 3.0.0 + * * @var int */ public $blogid = 0; @@ -248,16 +277,18 @@ * Site ID. * * @since 3.0.0 + * * @var int */ public $siteid = 0; /** - * List of WordPress per-blog tables. + * List of WordPress per-site tables. * * @since 2.5.0 + * * @see wpdb::tables() - * @var array + * @var string[] */ public $tables = array( 'posts', @@ -278,8 +309,9 @@ * 'categories', 'post2cat', and 'link2cat' were deprecated in 2.3.0, db version 5539. * * @since 2.9.0 + * * @see wpdb::tables() - * @var array + * @var string[] */ public $old_tables = array( 'categories', 'post2cat', 'link2cat' ); @@ -287,8 +319,9 @@ * List of WordPress global tables. * * @since 3.0.0 + * * @see wpdb::tables() - * @var array + * @var string[] */ public $global_tables = array( 'users', 'usermeta' ); @@ -296,8 +329,9 @@ * List of Multisite global tables. * * @since 3.0.0 + * * @see wpdb::tables() - * @var array + * @var string[] */ public $ms_global_tables = array( 'blogs', @@ -313,6 +347,7 @@ * WordPress Comments table. * * @since 1.5.0 + * * @var string */ public $comments; @@ -321,6 +356,7 @@ * WordPress Comment Metadata table. * * @since 2.9.0 + * * @var string */ public $commentmeta; @@ -329,6 +365,7 @@ * WordPress Links table. * * @since 1.5.0 + * * @var string */ public $links; @@ -337,6 +374,7 @@ * WordPress Options table. * * @since 1.5.0 + * * @var string */ public $options; @@ -345,6 +383,7 @@ * WordPress Post Metadata table. * * @since 1.5.0 + * * @var string */ public $postmeta; @@ -353,6 +392,7 @@ * WordPress Posts table. * * @since 1.5.0 + * * @var string */ public $posts; @@ -361,6 +401,7 @@ * WordPress Terms table. * * @since 2.3.0 + * * @var string */ public $terms; @@ -369,6 +410,7 @@ * WordPress Term Relationships table. * * @since 2.3.0 + * * @var string */ public $term_relationships; @@ -377,6 +419,7 @@ * WordPress Term Taxonomy table. * * @since 2.3.0 + * * @var string */ public $term_taxonomy; @@ -385,6 +428,7 @@ * WordPress Term Meta table. * * @since 4.4.0 + * * @var string */ public $termmeta; @@ -397,6 +441,7 @@ * WordPress User Metadata table. * * @since 2.3.0 + * * @var string */ public $usermeta; @@ -405,6 +450,7 @@ * WordPress Users table. * * @since 1.5.0 + * * @var string */ public $users; @@ -413,6 +459,7 @@ * Multisite Blogs table. * * @since 3.0.0 + * * @var string */ public $blogs; @@ -421,6 +468,7 @@ * Multisite Blog Metadata table. * * @since 5.1.0 + * * @var string */ public $blogmeta; @@ -429,6 +477,7 @@ * Multisite Registration Log table. * * @since 3.0.0 + * * @var string */ public $registration_log; @@ -437,6 +486,7 @@ * Multisite Signups table. * * @since 3.0.0 + * * @var string */ public $signups; @@ -445,6 +495,7 @@ * Multisite Sites table. * * @since 3.0.0 + * * @var string */ public $site; @@ -453,6 +504,7 @@ * Multisite Sitewide Terms table. * * @since 3.0.0 + * * @var string */ public $sitecategories; @@ -461,6 +513,7 @@ * Multisite Site Metadata table. * * @since 3.0.0 + * * @var string */ public $sitemeta; @@ -472,6 +525,7 @@ * Keys are column names, values are format types: 'ID' => '%d'. * * @since 2.8.0 + * * @see wpdb::prepare() * @see wpdb::insert() * @see wpdb::update() @@ -485,6 +539,7 @@ * Database table columns charset. * * @since 2.2.0 + * * @var string */ public $charset; @@ -493,6 +548,7 @@ * Database table columns collate. * * @since 2.2.0 + * * @var string */ public $collate; @@ -501,6 +557,7 @@ * Database Username. * * @since 2.9.0 + * * @var string */ protected $dbuser; @@ -509,6 +566,7 @@ * Database Password. * * @since 3.1.0 + * * @var string */ protected $dbpassword; @@ -517,6 +575,7 @@ * Database Name. * * @since 3.1.0 + * * @var string */ protected $dbname; @@ -525,15 +584,24 @@ * Database Host. * * @since 3.1.0 + * * @var string */ protected $dbhost; /** - * Database Handle. + * Database handle. + * + * Possible values: + * + * - `mysqli` instance when the `mysqli` driver is in use + * - `resource` when the older `mysql` driver is in use + * - `null` if the connection is yet to be made or has been closed + * - `false` if the connection has failed * * @since 0.71 - * @var string + * + * @var mysqli|resource|false|null */ protected $dbh; @@ -541,6 +609,7 @@ * A textual description of the last query/get_row/get_var call. * * @since 3.0.0 + * * @var string */ public $func_call; @@ -554,6 +623,7 @@ * will force the checks to occur. * * @since 3.3.0 + * * @var bool */ public $is_mysql = null; @@ -562,7 +632,8 @@ * A list of incompatible SQL modes. * * @since 3.9.0 - * @var array + * + * @var string[] */ protected $incompatible_modes = array( 'NO_ZERO_DATE', @@ -577,6 +648,7 @@ * Whether to use mysqli over mysql. Default false. * * @since 3.9.0 + * * @var bool */ private $use_mysqli = false; @@ -585,32 +657,52 @@ * Whether we've managed to successfully connect at some point. * * @since 3.9.0 + * * @var bool */ private $has_connected = false; /** + * Time when the last query was performed. + * + * Only set when `SAVEQUERIES` is defined and truthy. + * + * @since 1.5.0 + * + * @var float + */ + public $time_start = null; + + /** + * The last SQL error that was encountered. + * + * @since 2.5.0 + * + * @var WP_Error|string + */ + public $error = null; + + /** * Connects to the database server and selects a database. * - * PHP5 style constructor for compatibility with PHP5. Does the actual setting up + * Does the actual setting up * of the class properties and connection to the database. * * @since 2.0.8 * * @link https://core.trac.wordpress.org/ticket/3354 - * @global string $wp_version The WordPress version string. - * - * @param string $dbuser MySQL database user. - * @param string $dbpassword MySQL database password. - * @param string $dbname MySQL database name. - * @param string $dbhost MySQL database host. + * + * @param string $dbuser Database user. + * @param string $dbpassword Database password. + * @param string $dbname Database name. + * @param string $dbhost Database host. */ public function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) { if ( WP_DEBUG && WP_DEBUG_DISPLAY ) { $this->show_errors(); } - // Use ext/mysqli if it exists unless WP_USE_EXT_MYSQL is defined as true. + // Use the `mysqli` extension if it exists unless `WP_USE_EXT_MYSQL` is defined as true. if ( function_exists( 'mysqli_connect' ) ) { $this->use_mysqli = true; @@ -773,9 +865,9 @@ * * @since 3.1.0 * - * @param resource $dbh The resource given by mysql_connect. - * @param string $charset Optional. The character set. Default null. - * @param string $collate Optional. The collation. Default null. + * @param mysqli|resource $dbh The connection returned by `mysqli_connect()` or `mysql_connect()`. + * @param string $charset Optional. The character set. Default null. + * @param string $collate Optional. The collation. Default null. */ public function set_charset( $dbh, $charset = null, $collate = null ) { if ( ! isset( $charset ) ) { @@ -983,16 +1075,16 @@ /** * Returns an array of WordPress tables. * - * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to override the WordPress users + * Also allows for the `CUSTOM_USER_TABLE` and `CUSTOM_USER_META_TABLE` to override the WordPress users * and usermeta tables that would otherwise be determined by the prefix. * - * The $scope argument can take one of the following: - * - * 'all' - returns 'all' and 'global' tables. No old tables are returned. - * 'blog' - returns the blog-level tables for the queried blog. - * 'global' - returns the global tables for the installation, returning multisite tables only on multisite. - * 'ms_global' - returns the multisite global tables, regardless if current installation is multisite. - * 'old' - returns tables which are deprecated. + * The `$scope` argument can take one of the following: + * + * - 'all' - returns 'all' and 'global' tables. No old tables are returned. + * - 'blog' - returns the blog-level tables for the queried blog. + * - 'global' - returns the global tables for the installation, returning multisite tables only on multisite. + * - 'ms_global' - returns the multisite global tables, regardless if current installation is multisite. + * - 'old' - returns tables which are deprecated. * * @since 3.0.0 * @@ -1006,8 +1098,8 @@ * @param bool $prefix Optional. Whether to include table prefixes. If blog prefix is requested, * then the custom users and usermeta tables will be mapped. Default true. * @param int $blog_id Optional. The blog_id to prefix. Used only when prefix is requested. - * Defaults to wpdb::$blogid. - * @return array Table names. When a prefix is requested, the key is the unprefixed table name. + * Defaults to `wpdb::$blogid`. + * @return string[] Table names. When a prefix is requested, the key is the unprefixed table name. */ public function tables( $scope = 'all', $prefix = true, $blog_id = 0 ) { switch ( $scope ) { @@ -1065,15 +1157,15 @@ } /** - * Selects a database using the current database connection. + * Selects a database using the current or provided database connection. * * The database name will be changed based on the current database connection. * On failure, the execution will bail and display a DB error. * * @since 0.71 * - * @param string $db MySQL database name. - * @param resource|null $dbh Optional link identifier. + * @param string $db Database name. + * @param mysqli|resource $dbh Optional database connection. */ public function select( $db, $dbh = null ) { if ( is_null( $dbh ) ) { @@ -1090,11 +1182,11 @@ if ( ! did_action( 'template_redirect' ) ) { wp_load_translations_early(); - $message = '
' . sprintf(
/* translators: %s: Database name. */
- __( 'We were able to connect to the database server (which means your username and password is okay) but not able to select the %s database.' ),
+ __( 'The database server could be connected to (which means your username and password is okay) but the %s database could not be selected.' ),
'' . htmlspecialchars( $db, ENT_QUOTES ) . '
'
) . "
' . sprintf( /* translators: %s: Support forums URL. */ - __( '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.' ), + __( 'If you do not 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.' ), __( 'https://wordpress.org/support/forums/' ) ) . "
\n"; @@ -1140,7 +1232,7 @@ * @param string $string * @return string */ - function _weak_escape( $string ) { + public function _weak_escape( $string ) { if ( func_num_args() === 1 && function_exists( '_deprecated_function' ) ) { _deprecated_function( __METHOD__, '3.6.0', 'wpdb::prepare() or esc_sql()' ); } @@ -1158,8 +1250,8 @@ * @param string $string String to escape. * @return string Escaped string. */ - function _real_escape( $string ) { - if ( ! is_scalar( $string ) && ! is_null( $string ) ) { + public function _real_escape( $string ) { + if ( ! is_scalar( $string ) ) { return ''; } @@ -1171,12 +1263,11 @@ } } else { $class = get_class( $this ); - if ( function_exists( '__' ) ) { - /* translators: %s: Database access abstraction class, usually wpdb or a class extending wpdb. */ - _doing_it_wrong( $class, sprintf( __( '%s must set a database connection for use with escaping.' ), $class ), '3.6.0' ); - } else { - _doing_it_wrong( $class, sprintf( '%s must set a database connection for use with escaping.', $class ), '3.6.0' ); - } + + wp_load_translations_early(); + /* translators: %s: Database access abstraction class, usually wpdb or a class extending wpdb. */ + _doing_it_wrong( $class, sprintf( __( '%s must set a database connection for use with escaping.' ), $class ), '3.6.0' ); + $escaped = addslashes( $string ); } @@ -1260,18 +1351,19 @@ * Prepares a SQL query for safe execution. * * Uses sprintf()-like syntax. The following placeholders can be used in the query string: - * %d (integer) - * %f (float) - * %s (string) + * + * - %d (integer) + * - %f (float) + * - %s (string) * * All placeholders MUST be left unquoted in the query string. A corresponding argument * MUST be passed for each placeholder. * * Note: There is one exception to the above: for compatibility with old behavior, - * numbered or formatted string placeholders (eg, %1$s, %5s) will not have quotes + * numbered or formatted string placeholders (eg, `%1$s`, `%5s`) will not have quotes * added by this function, so should be passed with appropriate quotes around them. * - * Literal percentage signs (%) in the query string must be written as %%. Percentage wildcards + * Literal percentage signs (`%`) in the query string must be written as `%%`. Percentage wildcards * (for example, to use in LIKE syntax) must be passed via a substitution argument containing * the complete LIKE string, these cannot be inserted directly in the query string. * Also see wpdb::esc_like(). @@ -1280,6 +1372,7 @@ * containing all arguments. A combination of the two is not supported. * * Examples: + * * $wpdb->prepare( "SELECT * FROM `table` WHERE `column` = %s AND `field` = %d OR `other_field` LIKE %s", array( 'foo', 1337, '%bar' ) ); * $wpdb->prepare( "SELECT DATE_FORMAT(`field`, '%%c') FROM `table` WHERE `column` = %s", 'foo' ); * @@ -1320,7 +1413,7 @@ // If args were passed as an array (as in vsprintf), move them up. $passed_as_array = false; - if ( is_array( $args[0] ) && count( $args ) === 1 ) { + if ( isset( $args[0] ) && is_array( $args[0] ) && 1 === count( $args ) ) { $passed_as_array = true; $args = $args[0]; } @@ -1420,7 +1513,7 @@ } /** - * First half of escaping for LIKE special characters % and _ before preparing for MySQL. + * First half of escaping for `LIKE` special characters `%` and `_` before preparing for SQL. * * Use this only before wpdb::prepare() or esc_sql(). Reversing the order is very bad for security. * @@ -1609,7 +1702,7 @@ /** * Connects to and selects database. * - * If $allow_bail is false, the lack of database connection will need to be handled manually. + * If `$allow_bail` is false, the lack of database connection will need to be handled manually. * * @since 3.0.0 * @since 3.9.0 $allow_bail parameter added. @@ -1628,6 +1721,13 @@ $client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0; if ( $this->use_mysqli ) { + /* + * Set the MySQLi error reporting off because WordPress handles its own. + * This is due to the default value change from `MYSQLI_REPORT_OFF` + * to `MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT` in PHP 8.1. + */ + mysqli_report( MYSQLI_REPORT_OFF ); + $this->dbh = mysqli_init(); $host = $this->dbhost; @@ -1702,7 +1802,7 @@ $message .= '' . sprintf(
/* translators: 1: wp-config.php, 2: Database host. */
- __( 'This either means that the username and password information in your %1$s file is incorrect or we can’t contact the database server at %2$s. This could mean your host’s database server is down.' ),
+ __( 'This either means that the username and password information in your %1$s file is incorrect or that contact with the database server at %2$s could not be established. This could mean your host’s database server is down.' ),
'wp-config.php
',
'' . htmlspecialchars( $this->dbhost, ENT_QUOTES ) . '
'
) . "
' . sprintf( /* translators: %s: Support forums URL. */ - __( '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.' ), + __( 'If you are unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.' ), __( 'https://wordpress.org/support/forums/' ) ) . "
\n"; @@ -1751,9 +1851,16 @@ * @since 4.9.0 * * @param string $host The DB_HOST setting to parse. - * @return array|false Array containing the host, the port, the socket and - * whether it is an IPv6 address, in that order. - * False if $host couldn't be parsed. + * @return array|false { + * Array containing the host, the port, the socket and + * whether it is an IPv6 address, in that order. + * False if the host couldn't be parsed. + * + * @type string $0 Host name. + * @type string|null $1 Port. + * @type string|null $2 Socket. + * @type bool $3 Whether it is an IPv6 address. + * } */ public function parse_db_host( $host ) { $port = null; @@ -1801,7 +1908,7 @@ * If this function is unable to reconnect, it will forcibly die, or if called * after the {@see 'template_redirect'} hook has been fired, return false instead. * - * If $allow_bail is false, the lack of database connection will need to be handled manually. + * If `$allow_bail` is false, the lack of database connection will need to be handled manually. * * @since 3.9.0 * @@ -1861,7 +1968,7 @@ $message .= '' . sprintf(
/* translators: %s: Database host. */
- __( 'This means that we lost contact with the database server at %s. This could mean your host’s database server is down.' ),
+ __( 'This means that the contact with the database server at %s was lost. This could mean your host’s database server is down.' ),
'' . htmlspecialchars( $this->dbhost, ENT_QUOTES ) . '
'
) . "
' . sprintf( /* translators: %s: Support forums URL. */ - __( '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.' ), + __( 'If you are unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.' ), __( 'https://wordpress.org/support/forums/' ) ) . "
\n"; @@ -1885,7 +1992,7 @@ } /** - * Performs a MySQL database query, using current database connection. + * Performs a database query, using current database connection. * * More information can be found on the documentation page. * @@ -1932,7 +2039,13 @@ // to flush again, just to make sure everything is clear. $this->flush(); if ( $stripped_query !== $query ) { - $this->insert_id = 0; + $this->insert_id = 0; + $this->last_query = $query; + + wp_load_translations_early(); + + $this->last_error = __( 'WordPress database error: Could not perform query because it contains invalid data.' ); + return false; } } @@ -1944,7 +2057,7 @@ $this->_do_query( $query ); - // MySQL server has gone away, try to reconnect. + // Database server has gone away, try to reconnect. $mysql_errno = 0; if ( ! empty( $this->dbh ) ) { if ( $this->use_mysqli ) { @@ -2169,6 +2282,7 @@ * Inserts a row into the table. * * Examples: + * * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 'bar' ) ) * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) ) * @@ -2198,6 +2312,7 @@ * Replaces a row in the table. * * Examples: + * * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 'bar' ) ) * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) ) * @@ -2248,7 +2363,7 @@ * Default 'INSERT'. * @return int|false The number of rows affected, or false on error. */ - function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) { + public function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) { $this->insert_id = 0; if ( ! in_array( strtoupper( $type ), array( 'REPLACE', 'INSERT' ), true ) ) { @@ -2285,6 +2400,7 @@ * Updates a row in the table. * * Examples: + * * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 'bar' ), array( 'ID' => 1 ) ) * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( 'ID' => 1 ), array( '%s', '%d' ), array( '%d' ) ) * @@ -2364,6 +2480,7 @@ * Deletes a row in the table. * * Examples: + * * wpdb::delete( 'table', array( 'ID' => 1 ) ) * wpdb::delete( 'table', array( 'ID' => 1 ), array( '%d' ) ) * @@ -2452,6 +2569,30 @@ $converted_data = $this->strip_invalid_text( $data ); if ( $data !== $converted_data ) { + + $problem_fields = array(); + foreach ( $data as $field => $value ) { + if ( $value !== $converted_data[ $field ] ) { + $problem_fields[] = $field; + } + } + + wp_load_translations_early(); + + if ( 1 === count( $problem_fields ) ) { + $this->last_error = sprintf( + /* translators: %s: Database field where the error occurred. */ + __( 'WordPress database error: Processing the value for the following field failed: %s. The supplied value may be too long or contains invalid data.' ), + reset( $problem_fields ) + ); + } else { + $this->last_error = sprintf( + /* translators: %s: Database fields where the error occurred. */ + __( 'WordPress database error: Processing the values for the following fields failed: %s. The supplied values may be too long or contain invalid data.' ), + implode( ', ', $problem_fields ) + ); + } + return false; } @@ -2573,11 +2714,11 @@ public function get_var( $query = null, $x = 0, $y = 0 ) { $this->func_call = "\$db->get_var(\"$query\", $x, $y)"; - if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { - $this->check_current_query = false; - } - if ( $query ) { + if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { + $this->check_current_query = false; + } + $this->query( $query ); } @@ -2607,11 +2748,11 @@ public function get_row( $query = null, $output = OBJECT, $y = 0 ) { $this->func_call = "\$db->get_row(\"$query\",$output,$y)"; - if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { - $this->check_current_query = false; - } - if ( $query ) { + if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { + $this->check_current_query = false; + } + $this->query( $query ); } else { return null; @@ -2649,11 +2790,11 @@ * @return array Database query result. Array indexed from 0 by SQL result row number. */ public function get_col( $query = null, $x = 0 ) { - if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { - $this->check_current_query = false; - } - if ( $query ) { + if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { + $this->check_current_query = false; + } + $this->query( $query ); } @@ -2687,11 +2828,11 @@ public function get_results( $query = null, $output = OBJECT ) { $this->func_call = "\$db->get_results(\"$query\", $output)"; - if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { - $this->check_current_query = false; - } - if ( $query ) { + if ( $this->check_current_query && $this->check_safe_collation( $query ) ) { + $this->check_current_query = false; + } + $this->query( $query ); } else { return null; @@ -2749,13 +2890,14 @@ /** * Filters the table charset value before the DB is checked. * - * Passing a non-null value to the filter will effectively short-circuit + * Returning a non-null value from the filter will effectively short-circuit * checking the DB for the charset, returning that value instead. * * @since 4.2.0 * - * @param string|null $charset The character set to use. Default null. - * @param string $table The name of the table being checked. + * @param string|WP_Error|null $charset The character set to use, WP_Error object + * if it couldn't be found. Default null. + * @param string $table The name of the table being checked. */ $charset = apply_filters( 'pre_get_table_charset', null, $table ); if ( null !== $charset ) { @@ -2773,7 +2915,7 @@ $table = '`' . implode( '`.`', $table_parts ) . '`'; $results = $this->get_results( "SHOW FULL COLUMNS FROM $table" ); if ( ! $results ) { - return new WP_Error( 'wpdb_get_table_charset_failure' ); + return new WP_Error( 'wpdb_get_table_charset_failure', __( 'Could not retrieve table charset.' ) ); } foreach ( $results as $column ) { @@ -2908,9 +3050,12 @@ * * @param string $table Table name. * @param string $column Column name. - * @return array|false|WP_Error array( 'length' => (int), 'type' => 'byte' | 'char' ). - * False if the column has no length (for example, numeric column). - * WP_Error object if there was an error. + * @return array|false|WP_Error { + * Array of column length information, false if the column has no length (for + * example, numeric column), WP_Error object if there was an error. + * + * @type int $length The column length. + * @type string $type One of 'byte' or 'char'. */ public function get_col_length( $table, $column ) { $tablekey = strtolower( $table ); @@ -3215,7 +3360,7 @@ $this->check_current_query = false; $row = $this->get_row( 'SELECT ' . implode( ', ', $sql ), ARRAY_A ); if ( ! $row ) { - return new WP_Error( 'wpdb_strip_invalid_text_failure' ); + return new WP_Error( 'wpdb_strip_invalid_text_failure', __( 'Could not strip invalid text.' ) ); } foreach ( array_keys( $data ) as $column ) { @@ -3510,7 +3655,6 @@ } } - /** * Closes the current database connection. * @@ -3656,7 +3800,7 @@ } /** - * Retrieves the MySQL server version. + * Retrieves the database server version. * * @since 2.7.0 * @@ -3667,7 +3811,7 @@ } /** - * Retrieves full MySQL server information. + * Retrieves full database server information. * * @since 5.5.0 *