--- wp-includes/wp-db.php.orig 2009-11-28 18:11:46.000000000 -0300 +++ wp-includes/wp-db.php 2009-11-28 18:39:51.000000000 -0300 @@ -686,36 +686,62 @@ global $db_list, $global_db_list; if( is_array( $db_list ) == false ) return true; - - if( $this->blogs != '' && preg_match("/(" . $this->blogs . "|" . $this->users . "|" . $this->usermeta . "|" . $this->site . "|" . $this->sitemeta . "|" . $this->sitecategories . ")/i",$query) ) { - $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 = ''; + + + /** + * Open One connection for reading + */ + + $action = 'read'; + $dbhname = "dbh$action"; + if(!is_resource($this->$dbhname)){ $details = $db_list[ 'read' ][ mt_rand( 0, count( $db_list[ 'read' ] ) -1 ) ]; $this->db_read = $details; + $this->$dbhname = @mysql_connect( $details[ 'db_host' ], $details[ 'db_user' ], $details[ 'db_password' ] ); + + if (!$this->$dbhname ) { + $this->bail(" +

Error establishing a database connection for Reading

+

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 $dbhost. 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.

+ "); + } + @mysql_query( "SET NAMES '{$this->charset}'", $this->$dbhname);//set NAMES + $this->select( $details[ 'db_name' ], $this->$dbhname ); } - $dbhname = "dbh" . $action; - $this->$dbhname = @mysql_connect( $details[ 'db_host' ], $details[ 'db_user' ], $details[ 'db_password' ] ); - if (!$this->$dbhname ) { - $this->bail(" -

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 $dbhost. 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.

-"); + /** + * Open connection for writing + */ + + $action = 'write'; + $dbhname = "dbh$action"; + if(!is_resource($this->$dbhname)){ + $details = $db_list[ 'write' ][ mt_rand( 0, count( $db_list[ 'write' ] ) -1 ) ]; + $this->db_write = $details; + + $this->$dbhname = @mysql_connect( $details[ 'db_host' ], $details[ 'db_user' ], $details[ 'db_password' ] ); + + if (!$this->$dbhname ) { + $this->bail(" +

Error establishing a database connection for Writing

+

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 $dbhost. 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.

+ "); + } + @mysql_query( "SET NAMES '{$this->charset}'", $this->$dbhname);//set NAMES + $this->select( $details[ 'db_name' ], $this->$dbhname ); } - $this->select( $details[ 'db_name' ], $this->$dbhname ); } /** @@ -750,32 +776,29 @@ // Perform the query via std mysql_query function.. if ( defined('SAVEQUERIES') && SAVEQUERIES ) $this->timer_start(); - + // use $this->dbh for read ops, and $this->dbhwrite for write ops // use $this->dbhglobal for gloal table ops unset( $dbh ); if( defined( "WP_USE_MULTIPLE_DB" ) && CONSTANT( "WP_USE_MULTIPLE_DB" ) == true ) { - 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 ( 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; + if( false == isset( $this->dbhread ) ) { + $this->db_connect( $query ); + } + $dbh =& $this->dbhread; $this->last_db_used = "read"; } } else { $dbh =& $this->dbh; $this->last_db_used = "other/read"; } - $this->result = @mysql_query($query, $dbh); ++$this->num_queries;