0

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

即使进行了查询并获取了结果,连接是否会在执行一定时间后自动关闭?

4

2 回答 2

2

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

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

那么,为什么会是 $resultfalse呢?几乎总是因为之前的查询失败并且脚本中没有错误处理。每个查询都可能失败,您无法阻止这种情况发生。因此,您总是需要某种错误处理,以便您的脚本在没有结果(但有错误条件)时不会尝试处理结果。最简单的错误处理是让脚本在发生错误时停止。

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

false如果有错误,mysql_query() 返回。在这种情况下,or执行语句之后,即如果查询失败,php 将打印 MySQL 的最后一条错误消息,然后退出。
不过,您可能希望实现一些更高级的错误处理例程……
例如,当PDO对象设置为 PDO::ERRMODE_EXCEPTION 时,只要发生错误就会引发异常。与(简单)返回值相比,错过它有点困难。

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

于 2009-10-20T16:47:56.203 回答
-1

您可能遇到了 php
Max Execution Time
Set Time Limit 设置的超时

于 2009-10-20T16:50:43.117 回答