Проверьте, может ли сервер MySQL принимать соединения - PullRequest
2 голосов
/ 18 ноября 2010

Как лучше всего из PHP проверить, будет ли соединение с сервером MySQL успешным? Я видел некоторые решения, которые сначала пытаются открыть сокетное соединение (с fsockopen) и подключиться к MySQL (через любое расширение, которое вы используете), только если сокетное соединение было успешным. Я не слишком уверен в этом, так как вам приходится каждый раз устанавливать два соединения, это слишком сильно забивает сервер?

Моя проблема в том, что если мой сервер MySQL блокируется или перестает работать по какой-либо причине, веб-страница просто перестает работать (она загружается в течение длительного времени, а затем обычно возвращается с ошибкой тайм-аута шлюза 504). Я хотел бы отобразить удобное сообщение об ошибке, если MySQL недоступен. Это также, надеюсь, позволило бы избежать еще большего забивания MySQL, если он уже испытывает трудности, поскольку новые клиенты не будут подключаться к нему, пока сервер не вернется.

Я использую расширение MySQLi , если это уместно.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Что вам нужно, это указать MYSQLI_OPT_CONNECT_TIMEOUT в mysqli :: options подробности

0 голосов
/ 18 ноября 2010
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

/*
 * This is the "official" OO way to do it,
 * BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
 */
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

/*
 * Use this instead of $connect_error if you need to ensure
 * compatibility with PHP versions prior to 5.2.9 and 5.3.0.
 */
if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

echo 'Success... ' . $mysqli->host_info . "\n";

$mysqli->close();
?>

От http://www.php.net/manual/en/mysqli.connect.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...