Как проверить, подключен ли PHP к базе данных? - PullRequest
37 голосов
/ 01 марта 2011

В основном в псевдокоде я ищу что-то вроде

if (connected_to_any_database()) {
    // do nothing
}
else {
    mysql_connect(...)
}

Как мне реализовать

connected_to_any_database()

Ответы [ 6 ]

46 голосов
/ 01 марта 2011

Вы пробовали mysql_ping () ?

Проверяет, работает ли соединение с сервером. Если он вышел из строя, попытка автоматического переподключения.

В качестве альтернативы вторым (менее надежным) подходом будет:

$link = mysql_connect('localhost','username','password');
//(...)
if($link == false){
    //try to reconnect
}

Обновление: Начиная с версии PHP 5.5, используйте mysqli_ping () вместо.

19 голосов
/ 01 марта 2011

Попробуйте использовать функцию PHP mysql_ping :

echo @mysql_ping() ? 'true' : 'false';

Вам нужно будет добавить "@", чтобы предположить, что MySQL Warnings вы получите за запуск этой функции без подключения кбаза данных.

Есть и другие способы, но это зависит от кода, который вы используете.

3 голосов
/ 01 марта 2011
2 голосов
/ 01 марта 2011

раньше ... (я имею в виду где-то в другом файле, который вы не уверены, что включили)

$db = mysql_connect()

позже ...

if (is_resource($db)) {
// connected
} else {
$db = mysql_connect();
}
1 голос
/ 01 декабря 2016

Барон Шварц пишет, что из-за условий гонки такая проверка перед записью является плохой практикой. Он защищает схему «попробуй / поймай» с reconnect в улове. Вот псевдокод, который он рекомендует:

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/

0 голосов
/ 01 марта 2011
// Earlier in your code
mysql_connect();
set_a_flag_that_db_is_connected();

// Later....
if (flag_is_set())
 mysql_connect(....);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...