Как проверить, подключен ли PHP к базе данных уже?
В основном в псевдокоде я ищу что-то вроде
if (connected_to_any_database()) {
// do nothing
}
else {
mysql_connect(...)
}
Как реализовать
connected_to_any_database()
Ответы
Ответ 1
Вы пробовали mysql_ping()?
Проверяет, работает ли соединение с сервером. Если он опустился, произойдет автоматическое повторное соединение.
Альтернативно, второй (менее надежный) подход:
$link = mysql_connect('localhost','username','password');
//(...)
if($link == false){
//try to reconnect
}
Обновление: Начиная с PHP 5.5, используйте mysqli_ping().
Ответ 2
Попробуйте использовать PHP mysql_ping:
echo @mysql_ping() ? 'true' : 'false';
Вам нужно будет добавить "@", чтобы предположить, что MySQL Warnings вы получите для запуска этой функции без подключения к базе данных.
Есть и другие способы, но это зависит от кода, который вы используете.
Ответ 3
mysql_ping
Ответ 4
раньше... (я имею в виду где-то в другом файле, который вы не уверены, что вы включили)
$db = mysql_connect()
позже...
if (is_resource($db)) {
// connected
} else {
$db = mysql_connect();
}
Ответ 5
Барон Шварц пишет, что из-за условий гонки эта "проверка перед записью" является плохой практикой. Он защищает шаблон 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/
Ответ 6
// Earlier in your code
mysql_connect();
set_a_flag_that_db_is_connected();
// Later....
if (flag_is_set())
mysql_connect(....);