我有一个需要几分钟才能执行的脚本。首先(mysql_connect)建立mysql连接,然后是一个带有一些查询的循环(mysql_query)。这个循环会持续很长时间,几分钟后脚本会抛出一条警告,告知mysql服务器已经离开(提供的参数不是有效的MySQL结果资源)。
连接是否会在执行一段时间后自动关闭,即使进行了查询并获取了结果?
发布于 2009-10-21 00:47:56
“提供的参数不是有效的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的价值。
发布于 2009-10-20 16:50:43
https://stackoverflow.com/questions/1595882
复制相似问题