В основном в псевдокоде я ищу что-то вроде
if (connected_to_any_database()) {
// do nothing
}
else {
mysql_connect(...)
}
Как реализовать
connected_to_any_database()
В основном в псевдокоде я ищу что-то вроде
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().
Попробуйте использовать PHP mysql_ping:
echo @mysql_ping() ? 'true' : 'false';
Вам нужно будет добавить "@", чтобы предположить, что MySQL Warnings вы получите для запуска этой функции без подключения к базе данных.
Есть и другие способы, но это зависит от кода, который вы используете.
раньше... (я имею в виду где-то в другом файле, который вы не уверены, что вы включили)
$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(....);