2009-10-20 33 views
0

我有一个需要几分钟才能执行的脚本。 mysql连接在开始时建立(mysql_connect),然后循环查询(mysql_query)。该循环持续很长时间,几分钟后脚本会抛出一个警告,提示mysql服务器已经消失(提供的参数不是有效的MySQL结果资源)mysql连接在一定时间后关闭? (PHP)

连接在一定的执行时间后是否自动关闭,即使查询和结果被提取?

回答

2

“提供的参数不是有效的MySQL结果资源”意味着mysql _...()函数期望您传递一个结果资源,但您确实传递了其他内容,例如,

$result = false; 
$row = mysql_fetch_array($result, MYSQL_ASSOC); 
// => Supplied argument is not a valid MySQL result resource 

那么,为什么$结果是false? Amost总是因为之前的查询失败,脚本中没有错误处理。每个查询都可能失败,因此无法阻止这种情况发生。因此,您总是需要某种错误处理方式,以便在没有任何错误条件时您的脚本不会尝试处理结果。最简单的错误处理是让脚本在发生错误时停止。如果有一个误差

$sql = 'SELECT x,y,z FROM ...'; 
$result = mysql_query($sql, $mysql) or die(mysql_error()); 

的mysql_query()返回false。在这种情况下,执行or后的语句,即如果查询失败,php将打印MySQL的最后一条错误消息,然后退出。
虽然你可能想实现一个更高级的错误处理例程,但是......
例如,当一个PDO对象设置为PDO :: ERRMODE_EXCEPTION时,每当发生错误时都会引发异常。与(简单)返回值相比,错过这一点更难。

编辑:这是原始答案的完整重写。第一个建议是查看wait_timeout的值。

+3

我可能读那错了设定的时间,但它看起来像默认的可能是28800秒,这是8小时......如果你正在运行8小时以上的东西,PHP脚本可能不是你的答案,其他原因! –

+0

oops ....“提供的参数不是有效的MySQL结果资源” - 这是完全不同的东西。让我重写整个答案.... – VolkerK

+0

谢谢你。我有mysql_query,后面跟着mysql_fetch_assoc。 该脚本目前最多需要10分钟。 – Alex

-1

,你可能打通过PHP
Max Execution Time
Set Time Limit

+0

我没有 - 最大执行时间设置为1小时,脚本继续运行mysql错误。 – Alex

+0

这两个都与最大脚本执行时间有关,OP在mySQL超时时遇到困难,脚本在连接关闭时仍在执行。 –