2011-02-28 133 views
33

基本上在伪代码我正在寻找类似如何检查PHP是否已连接到数据库?

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

如何实现

connected_to_any_database() 
+0

可能的复制(http://stackoverflow.com/questions/3262463/check -if-mysql-connection-is-valid) – 2016-11-29 16:38:41

回答

43

您是否尝试过mysql_ping()

检查与服务器的连接是否正常。如果发生故障,则尝试自动重新连接。

另外,第二(不可靠)的方法是:

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

更新:从PHP 5.5起,使用mysqli_ping()代替。

+4

更新:使用PHP 5.5开始,使用['mysqli_ping() '](http://www.php.net/manual/en/mysqli.ping.php) – 2014-05-06 18:10:15

+0

@AlvinK。如果我使用mysql_ping()显示我有连接,但是当我使用@mysqli_ping()时显示我不喜欢没有关系,我的意思是什么?吨。我正在使用xampp。显然我的PHP代码工作在其他计算机上,但不是在我的 – 2015-02-11 12:23:40

+0

@PankajNimgade:似乎是一个库或配置问题,你是否尝试重新安装另一个版本的xampp?甚至nginx + php5-fpm?打开'--verbose'选项,用php-CLI运行脚本。 – 2015-02-11 17:37:27

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

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

这是错误的,因为mysql服务器已经消失(通过超时关闭连接) – azat 2011-02-28 22:00:06

+0

@azat PHP脚本生命周期内的超时? OP的问题中有什么让你知道的? – 2011-02-28 22:01:03

+0

所以..我们不知道他的脚本是做什么的,正确的设置是mysql_ping – azat 2011-02-28 22:02:04

2

之前...(你不知道我的意思是在一些其他的文件放到你已经包括)

$db = mysql_connect() 

后...

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

错误的,mysql服务器可能会消失 – azat 2011-02-28 22:01:10

+0

@azat你有没有*看到一个mySQL服务器在PHP脚本中消失时,它不是一个配置问题? – 2011-02-28 22:01:55

+0

是的,我看到了,而不是一次 – azat 2011-02-28 22:02:54

16

尝试使用PHP的mysql_ping功能:

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

您将需要预先设置“@”来假设您将获得用于运行此功能的MySQL警告无需连接到数据库。

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

+0

这不足以使用“@”运算符。 – mailo 2011-02-28 22:03:48

+1

@mailto,我同意,因为抑制任何错误绝不是一个好主意,但是......在这种情况下,它确实完成了工作。更好的选择是检查mysql资源。 – McHerbie 2011-02-28 22:06:24

+0

是的,它完成了工作,你甚至可以使用eval()来完成这个任务,但它会好吗?我们应该总是寻求最好的解决方案,在我看来:) – mailo 2011-02-28 22:09:41

0

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 

这里是他的全部博客:中[检查如果MySQL连接有效] https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/

相关问题