检查MySQL连接

时间:2011-08-01 16:35:23

标签: php mysql connection

我是一个偏执狂的人,即使我在做了一些事情之后在我的PHP函数中包含mysql_close(),有没有办法可以检查(除了另一个查询)以查看连接是否仍然打开,只是为了保证。

4 个答案:

答案 0 :(得分:5)

如果成功,mysql_close()函数将返回true。通过在检查mysql_close()的返回值之外添加额外的检查,您没有做任何有用的事情,并且在您的代码中可能会添加其他地方错误。

在任何情况下,当脚本完成时,非持久连接会自动关闭,因此没有必要,除非您有一些特定的理由提前终止资源。

答案 1 :(得分:1)

您可以尝试mysql_ping()

以下是该页面的摘录:

bool mysql_ping ([ resource $link_identifier ] )
Checks whether or not the connection to the server is working.
If it  has gone down, an automatic reconnection is attempted.
This function can be used by scripts that remain idle for a long while,
to check whether or not the server has closed the connection and
reconnect if necessary. 

Note:  Since MySQL 5.0.13, automatic reconnection feature is disabled.

至于这段摘录,我不知道自动重新连接功能是否被禁用注释是指mysql还是PHP。你必须试验它才能找到答案。如果这个重新连接问题确实如此,那么@Brad的回答是偏执的,因为你可以在查询数据并获取数据后立即运行mysql_close。此时您可以确定没有有效连接,因为您明确关闭了它。因此,您必须为下一个查询运行mysql_connect。

但是,让非持久性连接关闭并不总是一个好主意,因为这可能会在数据库服务器的netstat中存储TIME_WAIT。这会让网络服务器误以为数据库连接不再可用,因为MySQL会在操作系统实际上成为原因,因为它会延迟释放连接资源。为了更安全,抱歉,完成后运行mysql_close,下一个查询运行mysql_connect / mysql_query。

如果您愿意,可以构建一个try-catch范例或一组if-then-else stataments,以便在已建立的连接上首次运行mysql_ping。如果为true,请将其与mysql_query一起使用。否则,运行mysql_close / mysql_connect / mysql_query。

答案 2 :(得分:0)

$con = mysql_connect("localhost" ,"name", "pass");
/* your code*/

if ($con){
   mysql_close();
}

答案 3 :(得分:0)

AFAIK如果用mysql_pconnect()打开mysql连接,它们在mysql_close()之后并没有真正关闭,它只是返回连接池