diff options
Diffstat (limited to 'srcs/wordpress/wp-includes/wp-db.php')
| -rw-r--r-- | srcs/wordpress/wp-includes/wp-db.php | 3625 |
1 files changed, 0 insertions, 3625 deletions
diff --git a/srcs/wordpress/wp-includes/wp-db.php b/srcs/wordpress/wp-includes/wp-db.php deleted file mode 100644 index 1be0412..0000000 --- a/srcs/wordpress/wp-includes/wp-db.php +++ /dev/null @@ -1,3625 +0,0 @@ -<?php -/** - * WordPress DB Class - * - * Original code from {@link http://php.justinvincent.com Justin Vincent (justin@visunet.ie)} - * - * @package WordPress - * @subpackage Database - * @since 0.71 - */ - -/** - * @since 0.71 - */ -define( 'EZSQL_VERSION', 'WP1.25' ); - -/** - * @since 0.71 - */ -define( 'OBJECT', 'OBJECT' ); -// phpcs:ignore Generic.NamingConventions.UpperCaseConstantName.ConstantNotUpperCase -define( 'object', 'OBJECT' ); // Back compat. - -/** - * @since 2.5.0 - */ -define( 'OBJECT_K', 'OBJECT_K' ); - -/** - * @since 0.71 - */ -define( 'ARRAY_A', 'ARRAY_A' ); - -/** - * @since 0.71 - */ -define( 'ARRAY_N', 'ARRAY_N' ); - -/** - * WordPress Database Access Abstraction Object - * - * It is possible to replace this class with your own - * by setting the $wpdb global variable in wp-content/db.php - * file to your class. The wpdb class will still be included, - * so you can extend it or simply use your own. - * - * @link https://codex.wordpress.org/Function_Reference/wpdb_Class - * - * @since 0.71 - */ -class wpdb { - - /** - * Whether to show SQL/DB errors. - * - * Default behavior is to show errors if both WP_DEBUG and WP_DEBUG_DISPLAY - * evaluated to true. - * - * @since 0.71 - * @var bool - */ - var $show_errors = false; - - /** - * Whether to suppress errors during the DB bootstrapping. - * - * @since 2.5.0 - * @var bool - */ - var $suppress_errors = false; - - /** - * The last error during query. - * - * @since 2.5.0 - * @var string - */ - public $last_error = ''; - - /** - * Amount of queries made - * - * @since 1.2.0 - * @var int - */ - public $num_queries = 0; - - /** - * Count of rows returned by previous query - * - * @since 0.71 - * @var int - */ - public $num_rows = 0; - - /** - * Count of affected rows by previous query - * - * @since 0.71 - * @var int - */ - var $rows_affected = 0; - - /** - * The ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - * - * @since 0.71 - * @var int - */ - public $insert_id = 0; - - /** - * Last query made - * - * @since 0.71 - * @var string - */ - var $last_query; - - /** - * Results of the last query made - * - * @since 0.71 - * @var array|null - */ - var $last_result; - - /** - * MySQL result, which is either a resource or boolean. - * - * @since 0.71 - * @var mixed - */ - protected $result; - - /** - * Cached column info, for sanity checking data before inserting - * - * @since 4.2.0 - * @var array - */ - protected $col_meta = array(); - - /** - * Calculated character sets on tables - * - * @since 4.2.0 - * @var array - */ - protected $table_charset = array(); - - /** - * Whether text fields in the current query need to be sanity checked. - * - * @since 4.2.0 - * @var bool - */ - protected $check_current_query = true; - - /** - * 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 - */ - private $checking_collation = false; - - /** - * Saved info on the table column - * - * @since 0.71 - * @var array - */ - protected $col_info; - - /** - * Log of queries that were executed, for debugging purposes. - * - * @since 1.5.0 - * @since 2.5.0 The third element in each query log was added to record the calling functions. - * @since 5.1.0 The fourth element in each query log was added to record the start time. - * @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. - * - * @type array ...$0 { - * Data for each query. - * - * @type string $0 The query's SQL. - * @type float $1 Total time spent on the query, in seconds. - * @type string $2 Comma separated list of the calling functions. - * @type float $3 Unix timestamp of the time at the start of the query. - * @type array $4 Custom query data. - * } - * } - */ - var $queries; - - /** - * The number of times to retry reconnecting before dying. - * - * @since 3.9.0 - * @see wpdb::check_connection() - * @var int - */ - protected $reconnect_retries = 5; - - /** - * 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 = ''; - - /** - * WordPress base table prefix. - * - * @since 3.0.0 - * @var string - */ - public $base_prefix; - - /** - * Whether the database queries are ready to start executing. - * - * @since 2.3.2 - * @var bool - */ - var $ready = false; - - /** - * Blog ID. - * - * @since 3.0.0 - * @var int - */ - public $blogid = 0; - - /** - * Site ID. - * - * @since 3.0.0 - * @var int - */ - public $siteid = 0; - - /** - * List of WordPress per-blog tables - * - * @since 2.5.0 - * @see wpdb::tables() - * @var array - */ - var $tables = array( - 'posts', - 'comments', - 'links', - 'options', - 'postmeta', - 'terms', - 'term_taxonomy', - 'term_relationships', - 'termmeta', - 'commentmeta', - ); - - /** - * List of deprecated WordPress tables - * - * categories, post2cat, and link2cat were deprecated in 2.3.0, db version 5539 - * - * @since 2.9.0 - * @see wpdb::tables() - * @var array - */ - var $old_tables = array( 'categories', 'post2cat', 'link2cat' ); - - /** - * List of WordPress global tables - * - * @since 3.0.0 - * @see wpdb::tables() - * @var array - */ - var $global_tables = array( 'users', 'usermeta' ); - - /** - * List of Multisite global tables - * - * @since 3.0.0 - * @see wpdb::tables() - * @var array - */ - var $ms_global_tables = array( - 'blogs', - 'blogmeta', - 'signups', - 'site', - 'sitemeta', - 'sitecategories', - 'registration_log', - ); - - /** - * WordPress Comments table - * - * @since 1.5.0 - * @var string - */ - public $comments; - - /** - * WordPress Comment Metadata table - * - * @since 2.9.0 - * @var string - */ - public $commentmeta; - - /** - * WordPress Links table - * - * @since 1.5.0 - * @var string - */ - public $links; - - /** - * WordPress Options table - * - * @since 1.5.0 - * @var string - */ - public $options; - - /** - * WordPress Post Metadata table - * - * @since 1.5.0 - * @var string - */ - public $postmeta; - - /** - * WordPress Posts table - * - * @since 1.5.0 - * @var string - */ - public $posts; - - /** - * WordPress Terms table - * - * @since 2.3.0 - * @var string - */ - public $terms; - - /** - * WordPress Term Relationships table - * - * @since 2.3.0 - * @var string - */ - public $term_relationships; - - /** - * WordPress Term Taxonomy table - * - * @since 2.3.0 - * @var string - */ - public $term_taxonomy; - - /** - * WordPress Term Meta table. - * - * @since 4.4.0 - * @var string - */ - public $termmeta; - - // - // Global and Multisite tables - // - - /** - * WordPress User Metadata table - * - * @since 2.3.0 - * @var string - */ - public $usermeta; - - /** - * WordPress Users table - * - * @since 1.5.0 - * @var string - */ - public $users; - - /** - * Multisite Blogs table - * - * @since 3.0.0 - * @var string - */ - public $blogs; - - /** - * Multisite Blog Metadata table - * - * @since 5.1.0 - * @var string - */ - public $blogmeta; - - /** - * Multisite Registration Log table - * - * @since 3.0.0 - * @var string - */ - public $registration_log; - - /** - * Multisite Signups table - * - * @since 3.0.0 - * @var string - */ - public $signups; - - /** - * Multisite Sites table - * - * @since 3.0.0 - * @var string - */ - public $site; - - /** - * Multisite Sitewide Terms table - * - * @since 3.0.0 - * @var string - */ - public $sitecategories; - - /** - * Multisite Site Metadata table - * - * @since 3.0.0 - * @var string - */ - public $sitemeta; - - /** - * Format specifiers for DB columns. Columns not listed here default to %s. Initialized during WP load. - * - * 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::delete() - * @see wp_set_wpdb_vars() - * @var array - */ - public $field_types = array(); - - /** - * Database table columns charset - * - * @since 2.2.0 - * @var string - */ - public $charset; - - /** - * Database table columns collate - * - * @since 2.2.0 - * @var string - */ - public $collate; - - /** - * Database Username - * - * @since 2.9.0 - * @var string - */ - protected $dbuser; - - /** - * Database Password - * - * @since 3.1.0 - * @var string - */ - protected $dbpassword; - - /** - * Database Name - * - * @since 3.1.0 - * @var string - */ - protected $dbname; - - /** - * Database Host - * - * @since 3.1.0 - * @var string - */ - protected $dbhost; - - /** - * Database Handle - * - * @since 0.71 - * @var string - */ - protected $dbh; - - /** - * A textual description of the last query/get_row/get_var call - * - * @since 3.0.0 - * @var string - */ - public $func_call; - - /** - * Whether MySQL is used as the database engine. - * - * 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. - * - * @since 3.3.0 - * @var bool - */ - public $is_mysql = null; - - /** - * A list of incompatible SQL modes. - * - * @since 3.9.0 - * @var array - */ - protected $incompatible_modes = array( - 'NO_ZERO_DATE', - 'ONLY_FULL_GROUP_BY', - 'STRICT_TRANS_TABLES', - 'STRICT_ALL_TABLES', - 'TRADITIONAL', - ); - - /** - * Whether to use mysqli over mysql. - * - * @since 3.9.0 - * @var bool - */ - private $use_mysqli = false; - - /** - * Whether we've managed to successfully connect at some point - * - * @since 3.9.0 - * @var bool - */ - private $has_connected = false; - - /** - * Connects to the database server and selects a database - * - * PHP5 style constructor for compatibility with PHP5. Does - * the actual setting up of the class properties and connection - * to the database. - * - * @link https://core.trac.wordpress.org/ticket/3354 - * @since 2.0.8 - * - * @global string $wp_version - * - * @param string $dbuser MySQL database user - * @param string $dbpassword MySQL database password - * @param string $dbname MySQL database name - * @param string $dbhost MySQL database host - */ - public function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) { - register_shutdown_function( array( $this, '__destruct' ) ); - - if ( WP_DEBUG && WP_DEBUG_DISPLAY ) { - $this->show_errors(); - } - - // Use ext/mysqli if it exists unless WP_USE_EXT_MYSQL is defined as true - if ( function_exists( 'mysqli_connect' ) ) { - $this->use_mysqli = true; - - if ( defined( 'WP_USE_EXT_MYSQL' ) ) { - $this->use_mysqli = ! WP_USE_EXT_MYSQL; - } - } - - $this->dbuser = $dbuser; - $this->dbpassword = $dbpassword; - $this->dbname = $dbname; - $this->dbhost = $dbhost; - - // wp-config.php creation will manually connect when ready. - if ( defined( 'WP_SETUP_CONFIG' ) ) { - return; - } - - $this->db_connect(); - } - - /** - * PHP5 style destructor and will run when database object is destroyed. - * - * @see wpdb::__construct() - * @since 2.0.8 - * @return true - */ - public function __destruct() { - return true; - } - - /** - * Makes private properties readable for backward compatibility. - * - * @since 3.5.0 - * - * @param string $name The private member to get, and optionally process - * @return mixed The private member - */ - public function __get( $name ) { - if ( 'col_info' === $name ) { - $this->load_col_info(); - } - - return $this->$name; - } - - /** - * Makes private properties settable for backward compatibility. - * - * @since 3.5.0 - * - * @param string $name The private member to set - * @param mixed $value The value to set - */ - public function __set( $name, $value ) { - $protected_members = array( - 'col_meta', - 'table_charset', - 'check_current_query', - ); - if ( in_array( $name, $protected_members, true ) ) { - return; - } - $this->$name = $value; - } - - /** - * Makes private properties check-able for backward compatibility. - * - * @since 3.5.0 - * - * @param string $name The private member to check - * - * @return bool If the member is set or not - */ - public function __isset( $name ) { - return isset( $this->$name ); - } - - /** - * Makes private properties un-settable for backward compatibility. - * - * @since 3.5.0 - * - * @param string $name The private member to unset - */ - public function __unset( $name ) { - unset( $this->$name ); - } - - /** - * Set $this->charset and $this->collate - * - * @since 3.1.0 - */ - public function init_charset() { - $charset = ''; - $collate = ''; - - if ( function_exists( 'is_multisite' ) && is_multisite() ) { - $charset = 'utf8'; - if ( defined( 'DB_COLLATE' ) && DB_COLLATE ) { - $collate = DB_COLLATE; - } else { - $collate = 'utf8_general_ci'; - } - } elseif ( defined( 'DB_COLLATE' ) ) { - $collate = DB_COLLATE; - } - - if ( defined( 'DB_CHARSET' ) ) { - $charset = DB_CHARSET; - } - - $charset_collate = $this->determine_charset( $charset, $collate ); - - $this->charset = $charset_collate['charset']; - $this->collate = $charset_collate['collate']; - } - - /** - * Determines the best charset and collation to use given a charset and collation. - * - * For example, when able, utf8mb4 should be used instead of utf8. - * - * @since 4.6.0 - * - * @param string $charset The character set to check. - * @param string $collate The collation to check. - * @return array The most appropriate character set and collation to use. - */ - public function determine_charset( $charset, $collate ) { - if ( ( $this->use_mysqli && ! ( $this->dbh instanceof mysqli ) ) || empty( $this->dbh ) ) { - return compact( 'charset', 'collate' ); - } - - if ( 'utf8' === $charset && $this->has_cap( 'utf8mb4' ) ) { - $charset = 'utf8mb4'; - } - - if ( 'utf8mb4' === $charset && ! $this->has_cap( 'utf8mb4' ) ) { - $charset = 'utf8'; - $collate = str_replace( 'utf8mb4_', 'utf8_', $collate ); - } - - if ( 'utf8mb4' === $charset ) { - // _general_ is outdated, so we can upgrade it to _unicode_, instead. - if ( ! $collate || 'utf8_general_ci' === $collate ) { - $collate = 'utf8mb4_unicode_ci'; - } else { - $collate = str_replace( 'utf8_', 'utf8mb4_', $collate ); - } - } - - // _unicode_520_ is a better collation, we should use that when it's available. - if ( $this->has_cap( 'utf8mb4_520' ) && 'utf8mb4_unicode_ci' === $collate ) { - $collate = 'utf8mb4_unicode_520_ci'; - } - - return compact( 'charset', 'collate' ); - } - - /** - * Sets the connection's character set. - * - * @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. - */ - public function set_charset( $dbh, $charset = null, $collate = null ) { - if ( ! isset( $charset ) ) { - $charset = $this->charset; - } - if ( ! isset( $collate ) ) { - $collate = $this->collate; - } - if ( $this->has_cap( 'collation' ) && ! empty( $charset ) ) { - $set_charset_succeeded = true; - - if ( $this->use_mysqli ) { - if ( function_exists( 'mysqli_set_charset' ) && $this->has_cap( 'set_charset' ) ) { - $set_charset_succeeded = mysqli_set_charset( $dbh, $charset ); - } - - if ( $set_charset_succeeded ) { - $query = $this->prepare( 'SET NAMES %s', $charset ); - if ( ! empty( $collate ) ) { - $query .= $this->prepare( ' COLLATE %s', $collate ); - } - mysqli_query( $dbh, $query ); - } - } else { - if ( function_exists( 'mysql_set_charset' ) && $this->has_cap( 'set_charset' ) ) { - $set_charset_succeeded = mysql_set_charset( $charset, $dbh ); - } - if ( $set_charset_succeeded ) { - $query = $this->prepare( 'SET NAMES %s', $charset ); - if ( ! empty( $collate ) ) { - $query .= $this->prepare( ' COLLATE %s', $collate ); - } - mysql_query( $query, $dbh ); - } - } - } - } - - /** - * Change the current SQL mode, and ensure its WordPress compatibility. - * - * If no modes are passed, it will ensure the current MySQL server - * modes are compatible. - * - * @since 3.9.0 - * - * @param array $modes Optional. A list of SQL modes to set. - */ - public function set_sql_mode( $modes = array() ) { - if ( empty( $modes ) ) { - if ( $this->use_mysqli ) { - $res = mysqli_query( $this->dbh, 'SELECT @@SESSION.sql_mode' ); - } else { - $res = mysql_query( 'SELECT @@SESSION.sql_mode', $this->dbh ); - } - - if ( empty( $res ) ) { - return; - } - - if ( $this->use_mysqli ) { - $modes_array = mysqli_fetch_array( $res ); - if ( empty( $modes_array[0] ) ) { - return; - } - $modes_str = $modes_array[0]; - } else { - $modes_str = mysql_result( $res, 0 ); - } - - if ( empty( $modes_str ) ) { - return; - } - - $modes = explode( ',', $modes_str ); - } - - $modes = array_change_key_case( $modes, CASE_UPPER ); - - /** - * Filters the list of incompatible SQL modes to exclude. - * - * @since 3.9.0 - * - * @param array $incompatible_modes An array of incompatible modes. - */ - $incompatible_modes = (array) apply_filters( 'incompatible_sql_modes', $this->incompatible_modes ); - - foreach ( $modes as $i => $mode ) { - if ( in_array( $mode, $incompatible_modes ) ) { - unset( $modes[ $i ] ); - } - } - - $modes_str = implode( ',', $modes ); - - if ( $this->use_mysqli ) { - mysqli_query( $this->dbh, "SET SESSION sql_mode='$modes_str'" ); - } else { - mysql_query( "SET SESSION sql_mode='$modes_str'", $this->dbh ); - } - } - - /** - * Sets the table prefix for the WordPress tables. - * - * @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 - */ - public function set_prefix( $prefix, $set_table_names = true ) { - - if ( preg_match( '|[^a-z0-9_]|i', $prefix ) ) { - return new WP_Error( 'invalid_db_prefix', 'Invalid database prefix' ); - } - - $old_prefix = is_multisite() ? '' : $prefix; - - if ( isset( $this->base_prefix ) ) { - $old_prefix = $this->base_prefix; - } - - $this->base_prefix = $prefix; - - if ( $set_table_names ) { - foreach ( $this->tables( 'global' ) as $table => $prefixed_table ) { - $this->$table = $prefixed_table; - } - - if ( is_multisite() && empty( $this->blogid ) ) { - return $old_prefix; - } - - $this->prefix = $this->get_blog_prefix(); - - foreach ( $this->tables( 'blog' ) as $table => $prefixed_table ) { - $this->$table = $prefixed_table; - } - - foreach ( $this->tables( 'old' ) as $table => $prefixed_table ) { - $this->$table = $prefixed_table; - } - } - return $old_prefix; - } - - /** - * Sets blog id. - * - * @since 3.0.0 - * - * @param int $blog_id - * @param int $network_id Optional. - * @return int previous blog id - */ - public function set_blog_id( $blog_id, $network_id = 0 ) { - if ( ! empty( $network_id ) ) { - $this->siteid = $network_id; - } - - $old_blog_id = $this->blogid; - $this->blogid = $blog_id; - - $this->prefix = $this->get_blog_prefix(); - - foreach ( $this->tables( 'blog' ) as $table => $prefixed_table ) { - $this->$table = $prefixed_table; - } - - foreach ( $this->tables( 'old' ) as $table => $prefixed_table ) { - $this->$table = $prefixed_table; - } - - return $old_blog_id; - } - - /** - * Gets blog prefix. - * - * @since 3.0.0 - * @param int $blog_id Optional. - * @return string Blog prefix. - */ - public function get_blog_prefix( $blog_id = null ) { - 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 { - return $this->base_prefix . $blog_id . '_'; - } - } else { - return $this->base_prefix; - } - } - - /** - * Returns an array of WordPress tables. - * - * 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 if running multisite. - * 'ms_global' - returns the multisite global tables, regardless if current installation is multisite. - * 'old' - returns tables which are deprecated. - * - * @since 3.0.0 - * @uses wpdb::$tables - * @uses wpdb::$old_tables - * @uses wpdb::$global_tables - * @uses wpdb::$ms_global_tables - * - * @param string $scope Optional. Can be all, global, ms_global, blog, or old tables. Defaults to all. - * @param bool $prefix Optional. Whether to include table prefixes. Default true. If blog - * prefix is requested, then the custom users and usermeta tables will be mapped. - * @param int $blog_id Optional. The blog_id to prefix. Defaults to wpdb::$blogid. Used only when prefix is requested. - * @return array 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 ) { - case 'all': - $tables = array_merge( $this->global_tables, $this->tables ); - if ( is_multisite() ) { - $tables = array_merge( $tables, $this->ms_global_tables ); - } - break; - case 'blog': - $tables = $this->tables; - break; - case 'global': - $tables = $this->global_tables; - if ( is_multisite() ) { - $tables = array_merge( $tables, $this->ms_global_tables ); - } - break; - case 'ms_global': - $tables = $this->ms_global_tables; - break; - case 'old': - $tables = $this->old_tables; - break; - default: - return array(); - } - - if ( $prefix ) { - if ( ! $blog_id ) { - $blog_id = $this->blogid; - } - $blog_prefix = $this->get_blog_prefix( $blog_id ); - $base_prefix = $this->base_prefix; - $global_tables = array_merge( $this->global_tables, $this->ms_global_tables ); - foreach ( $tables as $k => $table ) { - if ( in_array( $table, $global_tables ) ) { - $tables[ $table ] = $base_prefix . $table; - } else { - $tables[ $table ] = $blog_prefix . $table; - } - unset( $tables[ $k ] ); - } - - if ( isset( $tables['users'] ) && defined( 'CUSTOM_USER_TABLE' ) ) { - $tables['users'] = CUSTOM_USER_TABLE; - } - - if ( isset( $tables['usermeta'] ) && defined( 'CUSTOM_USER_META_TABLE' ) ) { - $tables['usermeta'] = CUSTOM_USER_META_TABLE; - } - } - - return $tables; - } - - /** - * Selects a database using the current database connection. - * - * The database name will be changed based on the current database - * connection. On failure, the execution will bail and display an DB error. - * - * @since 0.71 - * - * @param string $db MySQL database name - * @param resource|null $dbh Optional link identifier. - */ - public function select( $db, $dbh = null ) { - if ( is_null( $dbh ) ) { - $dbh = $this->dbh; - } - - if ( $this->use_mysqli ) { - $success = mysqli_select_db( $dbh, $db ); - } else { - $success = mysql_select_db( $db, $dbh ); - } - if ( ! $success ) { - $this->ready = false; - if ( ! did_action( 'template_redirect' ) ) { - wp_load_translations_early(); - - $message = '<h1>' . __( 'Can’t select database' ) . "</h1>\n"; - - $message .= '<p>' . 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.' ), - '<code>' . htmlspecialchars( $db, ENT_QUOTES ) . '</code>' - ) . "</p>\n"; - - $message .= "<ul>\n"; - $message .= '<li>' . __( 'Are you sure it exists?' ) . "</li>\n"; - - $message .= '<li>' . sprintf( - /* translators: 1: Database user, 2: Database name. */ - __( 'Does the user %1$s have permission to use the %2$s database?' ), - '<code>' . htmlspecialchars( $this->dbuser, ENT_QUOTES ) . '</code>', - '<code>' . htmlspecialchars( $db, ENT_QUOTES ) . '</code>' - ) . "</li>\n"; - - $message .= '<li>' . sprintf( - /* translators: %s: Database name. */ - __( 'On some systems the name of your database is prefixed with your username, so it would be like <code>username_%1$s</code>. Could that be the problem?' ), - htmlspecialchars( $db, ENT_QUOTES ) - ) . "</li>\n"; - - $message .= "</ul>\n"; - - $message .= '<p>' . sprintf( - /* translators: %s: Support forums URL. */ - __( 'If you don’t know how to set up a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href="%s">WordPress Support Forums</a>.' ), - __( 'https://wordpress.org/support/forums/' ) - ) . "</p>\n"; - - $this->bail( $message, 'db_select_fail' ); - } - } - } - - /** - * Do not use, deprecated. - * - * Use esc_sql() or wpdb::prepare() instead. - * - * @since 2.8.0 - * @deprecated 3.6.0 Use wpdb::prepare() - * @see wpdb::prepare - * @see esc_sql() - * - * @param string $string - * @return string - */ - function _weak_escape( $string ) { - if ( func_num_args() === 1 && function_exists( '_deprecated_function' ) ) { - _deprecated_function( __METHOD__, '3.6.0', 'wpdb::prepare() or esc_sql()' ); - } - return addslashes( $string ); - } - - /** - * Real escape, using mysqli_real_escape_string() or mysql_real_escape_string() - * - * @see mysqli_real_escape_string() - * @see mysql_real_escape_string() - * @since 2.8.0 - * - * @param string $string to escape - * @return string escaped - */ - function _real_escape( $string ) { - if ( $this->dbh ) { - if ( $this->use_mysqli ) { - $escaped = mysqli_real_escape_string( $this->dbh, $string ); - } else { - $escaped = mysql_real_escape_string( $string, $this->dbh ); - } - } 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' ); - } - $escaped = addslashes( $string ); - } - - return $this->add_placeholder_escape( $escaped ); - } - - /** - * Escape data. Works on arrays. - * - * @uses wpdb::_real_escape() - * @since 2.8.0 - * - * @param string|array $data - * @return string|array escaped - */ - public function _escape( $data ) { - if ( is_array( $data ) ) { - foreach ( $data as $k => $v ) { - if ( is_array( $v ) ) { - $data[ $k ] = $this->_escape( $v ); - } else { - $data[ $k ] = $this->_real_escape( $v ); - } - } - } else { - $data = $this->_real_escape( $data ); - } - - return $data; - } - - /** - * Do not use, deprecated. - * - * Use esc_sql() or wpdb::prepare() instead. - * - * @since 0.71 - * @deprecated 3.6.0 Use wpdb::prepare() - * @see wpdb::prepare() - * @see esc_sql() - * - * @param mixed $data - * @return mixed - */ - public function escape( $data ) { - if ( func_num_args() === 1 && function_exists( '_deprecated_function' ) ) { - _deprecated_function( __METHOD__, '3.6.0', 'wpdb::prepare() or esc_sql()' ); - } - if ( is_array( $data ) ) { - foreach ( $data as $k => $v ) { - if ( is_array( $v ) ) { - $data[ $k ] = $this->escape( $v, 'recursive' ); - } else { - $data[ $k ] = $this->_weak_escape( $v, 'internal' ); - } - } - } else { - $data = $this->_weak_escape( $data, 'internal' ); - } - - return $data; - } - - /** - * Escapes content by reference for insertion into the database, for security - * - * @uses wpdb::_real_escape() - * - * @since 2.3.0 - * - * @param string $string to escape - */ - public function escape_by_ref( &$string ) { - if ( ! is_float( $string ) ) { - $string = $this->_real_escape( $string ); - } - } - - /** - * 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) - * - * All placeholders MUST be left unquoted in the query string. A corresponding argument - * MUST be passed for each placeholder. - * - * For compatibility with old behavior, 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 for your usage. - * - * 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(). - * - * Arguments may be passed as individual arguments to the method, or as a single array 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", |
