public function check_connection($allow_bail = true)
{
if ($this->use_mysqli) {
if (@mysqli_ping($this->dbh)) {
return true;
}
} else {
if (@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;
}
// We weren't able to reconnect, so we better bail.
$this->bail(sprintf("\n<h1>Error reconnecting to the database</h1>\n<p>This means that we lost contact with the database server at <code>%s</code>. This could mean your host's database server is down.</p>\n<ul>\n\t<li>Are you sure that the database server is running?</li>\n\t<li>Are you sure that the database server is not under particularly heavy load?</li>\n</ul>\n<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='https://wordpress.org/support/'>WordPress Support Forums</a>.</p>\n", htmlspecialchars($this->dbhost, ENT_QUOTES)), '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();
}