几分钟后,“MySQL服务器已经消失”

时间:2012-07-11 01:12:50

标签: php mysql disconnect

我在查询中有2个表,用于显示/通过电子邮件发送已保存的用户搜索信息:users&的心愿。

搜索信息包含书籍标题等。

我有一个第一个查询,旨在将所有在wishlist表中有记录的用户放入数组中。

然后使用foreach循环,通过第二个查询,获取每个书名并在各个站点运行搜索,并将该信息保存到屏幕或电子邮件中。

第一次运行需要大约3分钟才能组装第一个用户的信息,然而,在显示此信息后,我看到可怕的“MySQL服务器已经消失”。

根据http://dev.mysql.com/doc/refman/5.0/en/gone-away.html - 这不应该这么快发生。

第二个查询的代码很简单:

SELECT * FROM wishlist WHERE uid = " . $sendtouser . " ORDER BY wishid

在为该用户编译信息之后,我有以下内容关闭循环并结束连接。

} while ($row_rsWishDetails = mysql_fetch_assoc($rsWishDetails));
mysql_free_result($rsWishDetails);

我已经尝试了一些我在网上找到的其他建议,包括:

ini_set('max_execution_time', 22222);
ini_set('mysql.connect_timeout', 500);
ini_set('default_socket_timeout', 600);

但没有什么能解决这个问题。

有什么想法吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

使用长时间运行的脚本,您需要确保在运行任何查询之前连接仍处于打开状态。最好的方法是在查询之前使用mysql_ping()之类的内容。

此外,mysql相当陈旧且效率低下。您应该尝试升级到mysqli

答案 1 :(得分:0)

您需要测试可以接收的数据量。

您的数据库计算机是旧的还是结果行数是1000000000000000000000+, 你需要使用paging:limit,cursor等来修复你的查询......

它不是您问题的直接解决方案。

首先,使用

检查行数
SELECT COUNT(*) FROM wishlist WHERE uid = " . $sendtouser . "
  • 不需要ORDER BY。

检查删除ORDER BY短语,如果确定,请重新安排PHP代码。有时它可能会有所帮助。

和...

ini_set('max_execution_time', 22222);

它是客户端(PHP)配置,如果你知道的话,如果不允许mysql-server,它就没用了。