Description
If this function is unable to reconnect, it will forcibly die, or if called after the ‘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.
Parameters
- $allow_bail
-
(bool) (Optional) Allows the function to bail.
Default value: true
Return
(bool|void) True if the connection is up.
Source
File: wp-includes/wp-db.php
public function check_connection( $allow_bail = true ) {
if ( $this->use_mysqli ) {
if ( ! empty( $this->dbh ) && mysqli_ping( $this->dbh ) ) {
return true;
}
} else {
if ( ! empty( $this->dbh ) && mysql_ping( $this->dbh ) ) {
return true;
}
}
$error_reporting = false;
// Disable warnings, as we don't want to see a multitude of "unable to connect" messages.
if ( WP_DEBUG ) {
$error_reporting = error_reporting();
error_reporting( $error_reporting & ~E_WARNING );
}
for ( $tries = 1; $tries <= $this->reconnect_retries; $tries++ ) {
// On the last try, re-enable warnings. We want to see a single instance
// of the "unable to connect" message on the bail() screen, if it appears.
if ( $this->reconnect_retries === $tries && WP_DEBUG ) {
error_reporting( $error_reporting );
}
if ( $this->db_connect( false ) ) {
if ( $error_reporting ) {
error_reporting( $error_reporting );
}
return true;
}
sleep( 1 );
}
// If template_redirect has already happened, it's too late for wp_die()/dead_db().
// Let's just return and hope for the best.
if ( did_action( 'template_redirect' ) ) {
return false;
}
if ( ! $allow_bail ) {
return false;
}
wp_load_translations_early();
$message = '<h1>' . __( 'Error reconnecting to the database' ) . "</h1>\n";
$message .= '<p>' . 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.' ),
'<code>' . htmlspecialchars( $this->dbhost, ENT_QUOTES ) . '</code>'
) . "</p>\n";
$message .= "<ul>\n";
$message .= '<li>' . __( 'Are you sure the database server is running?' ) . "</li>\n";
$message .= '<li>' . __( 'Are you sure the database server is not under particularly heavy load?' ) . "</li>\n";
$message .= "</ul>\n";
$message .= '<p>' . 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 <a href="%s">WordPress Support Forums</a>.' ),
__( 'https://wordpress.org/support/forums/' )
) . "</p>\n";
// We weren't able to reconnect, so we better bail.
$this->bail( $message, 'db_connect_fail' );
// Call dead_db() if bail didn't die, because this database is no more.
// It has ceased to be (at least temporarily).
dead_db();
}
Changelog
Version | Description |
3.9.0 | Introduced. |