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

如何检查PHP是否已连接到数据库?,php,mysql,Php,Mysql,基本上在伪代码中,我在寻找 if (connected_to_any_database()) { // do nothing } else { mysql_connect(...) } 如何实现 connected_to_any_database() 你试过了吗 更新:从PHP5.5开始,改用 ping服务器连接,或者在连接断开时尝试重新连接 if ($mysqli->ping()) { printf ("Our connection is ok!\n&q

基本上在伪代码中,我在寻找

if (connected_to_any_database()) {
    // do nothing
}
else {
    mysql_connect(...)
}
如何实现

connected_to_any_database()
你试过了吗

更新:从PHP5.5开始,改用

ping服务器连接,或者在连接断开时尝试重新连接

if ($mysqli->ping()) {
  printf ("Our connection is ok!\n"); 
} else {
  printf ("Error: %s\n", $mysqli->error); 
}
或者,第二种(不太可靠)方法是:

$link = mysql_connect('localhost','username','password');
//(...)
if($link == false){
    //try to reconnect
}
以前。。。(我的意思是在其他文件中的某个地方,您不确定是否已包括在内)

后来

if (is_resource($db)) {
// connected
} else {
$db = mysql_connect();
}
尝试使用PHP的函数:

echo @mysql_ping() ? 'true' : 'false';
您需要在“@”前面加上前缀,以假设在未连接到数据库的情况下运行此函数时会收到MySQL警告


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

Baron Schwartz在博客中写道,由于种族条件,这种“写前检查”的做法是不好的。他提倡在catch中使用
重新连接
的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

以下是他的完整博客:

这是错误的,因为mysql服务器已经离开(通过超时关闭连接)@azat PHP脚本生命周期内的超时?OP的问题给了你什么想法?那么。。我们不知道他的脚本是做什么的,正确的决定是mysql_ping@azat,阅读问题。“它已经连接了吗?”并不意味着“我们丢失了吗?”@Capsule-Q:“它已经连接了吗?”,答:“是的,但不再是了,我们丢失了它”:)错了,mysql服务器可以运行了away@azat你有没有见过一个mySQL服务器在一个PHP脚本中消失,而这不是一个配置问题?请看我的编辑,当我说“以前”,当然不是同一个剧本。另外,问题是“数据库是否已连接”。@azat MySQL的消失主要与允许的最大数据包大小有关,如果发生这种情况,则会出现致命错误。如果尚未关闭连接,我将使用此代码。@mailto,我同意,因为消除任何错误从来都不是一个好主意,但是。。。在这种情况下,它确实完成了任务。更好的选择是检查mysql资源。是的,它完成了任务,您甚至可以使用eval()来完成此任务,但这样可以吗?在我看来,我们应该始终寻求最好的解决方案:)@mailo但是如果没有连接,你会怎么做,因为
mysql\u ping
将尝试与空数据建立连接?我认为没有办法避免
@
,除了为该行打开错误报告,实际上是相同的thing@Pekka,和
设置错误处理程序()
?@我不知道这是怎么回事。如果您还没有使用它,那就太过分了,即使您正在使用它,您仍然必须确定您只是在调用
mysql\u-ping
。分析回溯?如果您想在其他地方调用mysql\u ping,但对错误采取不同的操作(如显示错误),该怎么办。如果我使用mysql\u ping()表示我有连接。但是当我使用@mysqli_ping()时,它表明我没有连接。这是什么意思。我正在使用xampp。显然,我的php代码是在其他计算机上工作的,但不是在其他计算机上mine@PankajNimgade:似乎是库或配置问题,是否尝试用其他版本重新安装xampp?甚至nginx+php5 fpm?使用php CLI运行脚本,并启用
--verbose
选项。@AlvinK.,感谢您的回复,显然它现在正在工作,但我必须使用oop方法,并且必须使用“mysqli”。谢谢,最好的选择是使用ping功能。只有在使用mysqli库时,mysqli\u-ping才会使用fork。如果您的应用程序使用的是不推荐使用的mysql lib版本,那么请选择mysql_ping()至少作为概念证明,同时花时间升级到mysqli(我强烈推荐)。p、 这很可能就是为什么我也不为你工作的原因。希望这条线能帮助其他人,也能复制。
echo @mysql_ping() ? 'true' : 'false';
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