如何检查PHP是否已连接到数据库?

时间:2011-02-28 21:55:08

标签: php mysql

基本上在伪代码中我正在寻找像

这样的东西
if (connected_to_any_database()) {
    // do nothing
}
else {
    mysql_connect(...)
}

如何实施

connected_to_any_database()

6 个答案:

答案 0 :(得分:46)

您是否尝试过 mysql_ping()

  

检查与服务器的连接是否正常。如果它已经关闭,则尝试自动重新连接。

或者,第二种(不太可靠)的方法是:

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

更新:从PHP 5.5起,请改用 mysqli_ping()

答案 1 :(得分:19)

尝试使用PHP的mysql_ping函数:

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

你需要在前面添加“@”来假设你运行这个函数时得到的MySQL警告,而不是连接到数据库。

还有其他方法,但这取决于您正在使用的代码。

答案 2 :(得分:3)

答案 3 :(得分:2)

之前......(我的意思是在某个其他档案中的某个地方,你不确定你是否包括在内)

$db = mysql_connect()

...后

if (is_resource($db)) {
// connected
} else {
$db = mysql_connect();
}

答案 4 :(得分:1)

Baron Schwartz博客指出,由于竞争条件的影响,这在写作之前会检查'是一种不好的做法。他主张在catch中使用reconnect的try / 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/

答案 5 :(得分:-2)

// Earlier in your code
mysql_connect();
set_a_flag_that_db_is_connected();

// Later....
if (flag_is_set())
 mysql_connect(....);