Подтвердить что ты не робот

Как проверить, подключен ли PHP к базе данных уже?

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

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

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

connected_to_any_database()
4b9b3361

Ответ 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 вы получите для запуска этой функции без подключения к базе данных.

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

Ответ 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(....);