В основном в псевдокоде я ищу что-то вроде
if (connected_to_any_database()) { // do nothing } else { mysql_connect(...) }
Как реализовать
connected_to_any_database()
Вы пробовали mysql_ping () ?
Проверяет, работает ли соединение с сервером. Если он опустился, произойдет автоматическое повторное соединение.
Альтернативно, второй (менее надежный) подход будет:
$link = mysql_connect('localhost','username','password'); //(...) if($link == false){ //try to reconnect }
Обновление. Начиная с PHP 5.5, вместо этого используйте mysqli_ping () .
Попробуйте использовать функцию mysql_ping PHP:
echo @mysql_ping() ? 'true' : 'false';
Вам нужно будет добавить «@», чтобы предположить, что MySQL Warnings вы получите для запуска этой функции без подключения к базе данных.
Есть и другие способы, но это зависит от кода, который вы используете.
mysql_ping
раньше … (я имею в виду где-то в другом файле, который вы не уверены, что вы включили)
$db = mysql_connect()
позже…
if (is_resource($db)) { // connected } else { $db = mysql_connect(); }
Барон Шварц пишет, что из-за условий гонки эта «проверка перед записью» является плохой практикой. Он защищает шаблон try / catch с reconnect
в catch. Вот псевдокод, который он рекомендует:
function query_database(connection, sql, retries=1) while true try result=connection.execute(sql) return result catch InactiveConnectionException e if retries > 0 then retries = retries - 1 connection.reconnect() else throw e end end end end
Вот его полный блог: https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/
// Earlier in your code mysql_connect(); set_a_flag_that_db_is_connected(); // Later.... if (flag_is_set()) mysql_connect(....);