Remove WP_USE_MULTIPLE_DB. Introduce init_charset() and set_charset(). fixes #14672
git-svn-id: https://develop.svn.wordpress.org/trunk@15537 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
ae2f607f53
commit
b03d626909
|
@ -476,8 +476,6 @@ class wpdb {
|
||||||
* @param string $dbhost MySQL database host
|
* @param string $dbhost MySQL database host
|
||||||
*/
|
*/
|
||||||
function wpdb( $dbuser, $dbpassword, $dbname, $dbhost ) {
|
function wpdb( $dbuser, $dbpassword, $dbname, $dbhost ) {
|
||||||
if( defined( 'WP_USE_MULTIPLE_DB' ) && WP_USE_MULTIPLE_DB )
|
|
||||||
$this->db_connect();
|
|
||||||
return $this->__construct( $dbuser, $dbpassword, $dbname, $dbhost );
|
return $this->__construct( $dbuser, $dbpassword, $dbname, $dbhost );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,51 +500,14 @@ class wpdb {
|
||||||
if ( WP_DEBUG )
|
if ( WP_DEBUG )
|
||||||
$this->show_errors();
|
$this->show_errors();
|
||||||
|
|
||||||
if ( is_multisite() ) {
|
$this->init_charset();
|
||||||
$this->charset = 'utf8';
|
|
||||||
if ( defined( 'DB_COLLATE' ) && DB_COLLATE )
|
|
||||||
$this->collate = DB_COLLATE;
|
|
||||||
else
|
|
||||||
$this->collate = 'utf8_general_ci';
|
|
||||||
} elseif ( defined( 'DB_COLLATE' ) ) {
|
|
||||||
$this->collate = DB_COLLATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( defined( 'DB_CHARSET' ) )
|
|
||||||
$this->charset = DB_CHARSET;
|
|
||||||
|
|
||||||
$this->dbuser = $dbuser;
|
$this->dbuser = $dbuser;
|
||||||
|
$this->dbpassword = $dbpassword;
|
||||||
|
$this->dbname = $dbname;
|
||||||
|
$this->dbhost = $dbhost;
|
||||||
|
|
||||||
$this->dbh = @mysql_connect( $dbhost, $dbuser, $dbpassword, true );
|
$this->db_connect();
|
||||||
if ( !$this->dbh ) {
|
|
||||||
$this->bail( sprintf( /*WP_I18N_DB_CONN_ERROR*/"
|
|
||||||
<h1>Error establishing a database connection</h1>
|
|
||||||
<p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>%s</code>. This could mean your host's database server is down.</p>
|
|
||||||
<ul>
|
|
||||||
<li>Are you sure you have the correct username and password?</li>
|
|
||||||
<li>Are you sure that you have typed the correct hostname?</li>
|
|
||||||
<li>Are you sure that the database server is running?</li>
|
|
||||||
</ul>
|
|
||||||
<p>If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>
|
|
||||||
"/*/WP_I18N_DB_CONN_ERROR*/, $dbhost ), 'db_connect_fail' );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->ready = true;
|
|
||||||
|
|
||||||
if ( $this->has_cap( 'collation' ) && !empty( $this->charset ) ) {
|
|
||||||
if ( function_exists( 'mysql_set_charset' ) ) {
|
|
||||||
mysql_set_charset( $this->charset, $this->dbh );
|
|
||||||
$this->real_escape = true;
|
|
||||||
} else {
|
|
||||||
$query = $this->prepare( 'SET NAMES %s', $this->charset );
|
|
||||||
if ( ! empty( $this->collate ) )
|
|
||||||
$query .= $this->prepare( ' COLLATE %s', $this->collate );
|
|
||||||
$this->query( $query );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->select( $dbname, $this->dbh );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -560,6 +521,49 @@ class wpdb {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set $this->charset and $this->collate
|
||||||
|
*/
|
||||||
|
function init_charset() {
|
||||||
|
if ( function_exists('is_multisite') && is_multisite() ) {
|
||||||
|
$this->charset = 'utf8';
|
||||||
|
if ( defined( 'DB_COLLATE' ) && DB_COLLATE )
|
||||||
|
$this->collate = DB_COLLATE;
|
||||||
|
else
|
||||||
|
$this->collate = 'utf8_general_ci';
|
||||||
|
} elseif ( defined( 'DB_COLLATE' ) ) {
|
||||||
|
$this->collate = DB_COLLATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( defined( 'DB_CHARSET' ) )
|
||||||
|
$this->charset = DB_CHARSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the connection's character set.
|
||||||
|
*
|
||||||
|
* @param resource $dbh The resource given by mysql_connect
|
||||||
|
* @param string $charset The character set (optional)
|
||||||
|
* @param string $collate The collation (optional)
|
||||||
|
*/
|
||||||
|
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', $dbh ) && !empty( $charset ) ) {
|
||||||
|
if ( function_exists( 'mysql_set_charset' ) && $this->has_cap( 'set_charset', $dbh ) ) {
|
||||||
|
mysql_set_charset( $charset, $dbh );
|
||||||
|
$this->real_escape = true;
|
||||||
|
} else {
|
||||||
|
$query = $this->prepare( 'SET NAMES %s', $charset );
|
||||||
|
if ( ! empty( $collate ) )
|
||||||
|
$query .= $this->prepare( ' COLLATE %s', $collate );
|
||||||
|
mysql_query( $query, $dbh );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the table prefix for the WordPress tables.
|
* Sets the table prefix for the WordPress tables.
|
||||||
*
|
*
|
||||||
|
@ -1017,28 +1021,15 @@ class wpdb {
|
||||||
$this->last_query = null;
|
$this->last_query = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function db_connect( $query = "SELECT" ) {
|
/**
|
||||||
|
* Connect to and select database
|
||||||
|
*/
|
||||||
|
function db_connect() {
|
||||||
global $db_list, $global_db_list;
|
global $db_list, $global_db_list;
|
||||||
if ( ! is_array( $db_list ) )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if ( $this->blogs != '' && preg_match("/(" . $this->blogs . "|" . $this->users . "|" . $this->usermeta . "|" . $this->site . "|" . $this->sitemeta . "|" . $this->sitecategories . ")/i",$query) ) {
|
$this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, true );
|
||||||
$action = 'global';
|
|
||||||
$details = $global_db_list[ mt_rand( 0, count( $global_db_list ) -1 ) ];
|
|
||||||
$this->db_global = $details;
|
|
||||||
} elseif ( preg_match("/^\\s*(alter table|create|insert|delete|update|replace) /i",$query) ) {
|
|
||||||
$action = 'write';
|
|
||||||
$details = $db_list[ 'write' ][ mt_rand( 0, count( $db_list[ 'write' ] ) -1 ) ];
|
|
||||||
$this->db_write = $details;
|
|
||||||
} else {
|
|
||||||
$action = '';
|
|
||||||
$details = $db_list[ 'read' ][ mt_rand( 0, count( $db_list[ 'read' ] ) -1 ) ];
|
|
||||||
$this->db_read = $details;
|
|
||||||
}
|
|
||||||
|
|
||||||
$dbhname = "dbh" . $action;
|
if ( !$this->dbh ) {
|
||||||
$this->$dbhname = @mysql_connect( $details[ 'db_host' ], $details[ 'db_user' ], $details[ 'db_password' ] );
|
|
||||||
if (!$this->$dbhname ) {
|
|
||||||
$this->bail( sprintf( /*WP_I18N_DB_CONN_ERROR*/"
|
$this->bail( sprintf( /*WP_I18N_DB_CONN_ERROR*/"
|
||||||
<h1>Error establishing a database connection</h1>
|
<h1>Error establishing a database connection</h1>
|
||||||
<p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>%s</code>. This could mean your host's database server is down.</p>
|
<p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>%s</code>. This could mean your host's database server is down.</p>
|
||||||
|
@ -1048,9 +1039,14 @@ class wpdb {
|
||||||
<li>Are you sure that the database server is running?</li>
|
<li>Are you sure that the database server is running?</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>
|
<p>If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>
|
||||||
"/*/WP_I18N_DB_CONN_ERROR*/, $details['db_host'] ), 'db_connect_fail' );
|
"/*/WP_I18N_DB_CONN_ERROR*/, $this->dbhost ), 'db_connect_fail' );
|
||||||
}
|
}
|
||||||
$this->select( $details[ 'db_name' ], $this->$dbhname );
|
|
||||||
|
$this->set_charset( $this->dbh );
|
||||||
|
|
||||||
|
$this->ready = true;
|
||||||
|
|
||||||
|
$this->select( $this->dbname, $this->dbh );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1083,48 +1079,23 @@ class wpdb {
|
||||||
if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
|
if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
|
||||||
$this->timer_start();
|
$this->timer_start();
|
||||||
|
|
||||||
// use $this->dbh for read ops, and $this->dbhwrite for write ops
|
$this->result = @mysql_query( $query, $this->dbh );
|
||||||
// use $this->dbhglobal for gloal table ops
|
|
||||||
unset( $dbh );
|
|
||||||
if( defined( 'WP_USE_MULTIPLE_DB' ) && WP_USE_MULTIPLE_DB ) {
|
|
||||||
if( $this->blogs != '' && preg_match("/(" . $this->blogs . "|" . $this->users . "|" . $this->usermeta . "|" . $this->site . "|" . $this->sitemeta . "|" . $this->sitecategories . ")/i",$query) ) {
|
|
||||||
if( false == isset( $this->dbhglobal ) ) {
|
|
||||||
$this->db_connect( $query );
|
|
||||||
}
|
|
||||||
$dbh =& $this->dbhglobal;
|
|
||||||
$this->last_db_used = "global";
|
|
||||||
} elseif ( preg_match("/^\\s*(alter table|create|insert|delete|update|replace) /i",$query) ) {
|
|
||||||
if( false == isset( $this->dbhwrite ) ) {
|
|
||||||
$this->db_connect( $query );
|
|
||||||
}
|
|
||||||
$dbh =& $this->dbhwrite;
|
|
||||||
$this->last_db_used = "write";
|
|
||||||
} else {
|
|
||||||
$dbh =& $this->dbh;
|
|
||||||
$this->last_db_used = "read";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$dbh =& $this->dbh;
|
|
||||||
$this->last_db_used = "other/read";
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->result = @mysql_query( $query, $dbh );
|
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
|
if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
|
||||||
$this->queries[] = array( $query, $this->timer_stop(), $this->get_caller() );
|
$this->queries[] = array( $query, $this->timer_stop(), $this->get_caller() );
|
||||||
|
|
||||||
// If there is an error then take note of it..
|
// If there is an error then take note of it..
|
||||||
if ( $this->last_error = mysql_error( $dbh ) ) {
|
if ( $this->last_error = mysql_error( $this->dbh ) ) {
|
||||||
$this->print_error();
|
$this->print_error();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( preg_match( "/^\\s*(insert|delete|update|replace|alter) /i", $query ) ) {
|
if ( preg_match( "/^\\s*(insert|delete|update|replace|alter) /i", $query ) ) {
|
||||||
$this->rows_affected = mysql_affected_rows( $dbh );
|
$this->rows_affected = mysql_affected_rows( $this->dbh );
|
||||||
// Take note of the insert_id
|
// Take note of the insert_id
|
||||||
if ( preg_match( "/^\\s*(insert|replace) /i", $query ) ) {
|
if ( preg_match( "/^\\s*(insert|replace) /i", $query ) ) {
|
||||||
$this->insert_id = mysql_insert_id($dbh);
|
$this->insert_id = mysql_insert_id($this->dbh);
|
||||||
}
|
}
|
||||||
// Return number of rows affected
|
// Return number of rows affected
|
||||||
$return_val = $this->rows_affected;
|
$return_val = $this->rows_affected;
|
||||||
|
@ -1544,6 +1515,8 @@ class wpdb {
|
||||||
case 'group_concat' : // @since 2.7
|
case 'group_concat' : // @since 2.7
|
||||||
case 'subqueries' : // @since 2.7
|
case 'subqueries' : // @since 2.7
|
||||||
return version_compare( $version, '4.1', '>=' );
|
return version_compare( $version, '4.1', '>=' );
|
||||||
|
case 'set_charset' :
|
||||||
|
return version_compare($version, '5.0.7', '>=');
|
||||||
};
|
};
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue