我有一个需要几分钟才能执行的脚本。 mysql连接在开头建立(mysql_connect),然后是一个带有一些查询的循环(mysql_query)。该循环持续很长时间,几分钟后脚本会抛出一条警告,告知mysql服务器已经消失(提供的参数不是有效的MySQL结果资源)
在执行一段时间后连接是否会自动关闭,即使进行了查询并获取了结果?
答案 0 :(得分:2)
“提供的参数不是有效的MySQL结果资源”意味着mysql _...()函数要求您传递结果资源,但确实传递了其他内容,例如
$result = false;
$row = mysql_fetch_array($result, MYSQL_ASSOC);
// => Supplied argument is not a valid MySQL result resource
那么,为什么$ result会成为false
?几乎总是因为先前的查询失败并且脚本中没有错误处理。每个查询都可能失败,您无法阻止这种情况发生。因此,您始终需要某种错误处理,以便您的脚本在没有错误时会尝试处理结果(但错误条件)。最简单的错误处理是在发生错误时让脚本停止。
$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的价值。
答案 1 :(得分:-1)
你可能正在按照时间设定
Max Execution Time
Set Time Limit