2010-11-18 80 views
2

从PHP检查与MySQL服务器的连接是否成功的最佳方法是什么?我见过一些解决方案,首先尝试打开套接字连接(使用fsockopen),并且只有在套接字连接成功时才连接到MySQL(通过您使用的任何扩展名)。我不太确定这一点,因为你必须每次都建立两个连接,这是否会对服务器造成太大的影响?检查MySQL服务器是否能够接受连接

我的问题是,如果我的MySQL服务器锁定或停止工作,无论出于何种原因网页刚停止工作(它加载了很长时间,然后通常会返回504网关超时错误)。如果MySQL不可用,我想显示一个用户友好的错误消息。这也希望能够避免MySQL在已经陷入困境的情况下被更多地攻击,因为新的客户端在服务器恢复之前不会连接到它。

我使用的是MySQLi扩展名,如果这是相关的。

+0

应该不是一个MySQL连接尝试超时比较快? – 2010-11-18 11:28:25

+0

取决于connect_timeout设置 – ajreal 2010-11-18 11:30:00

回答

2

你需要的是什么MYSQLI_OPT_CONNECT_TIMEOUT失败时指定的mysqli ::选项 details

+0

+1这听起来像是正确的调整。 – 2010-11-18 11:29:21

+0

好的,这有助于超时发生。但是我仍然担心MySQL服务器的MySQLi连接比'fsockopen'检查更昂贵。有什么想法吗? – 2010-11-18 11:39:25

+0

使用fsockopen,恕我直言 - 两个比一个大。 – ajreal 2010-11-18 11:44:53

0
<?php 
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

/* 
* This is the "official" OO way to do it, 
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0. 
*/ 
if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
      . $mysqli->connect_error); 
} 

/* 
* Use this instead of $connect_error if you need to ensure 
* compatibility with PHP versions prior to 5.2.9 and 5.3.0. 
*/ 
if (mysqli_connect_error()) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 

echo 'Success... ' . $mysqli->host_info . "\n"; 

$mysqli->close(); 
?> 

http://www.php.net/manual/en/mysqli.connect.php

+0

这将给我一个错误,在MySqli扩展将等待上帝知道多久尝试连接。我需要知道在我做一个“新的MySqli ......”之前我能否连接 – 2010-11-18 11:28:12