2

我在查询中有 2 个表,旨在显示/通过电子邮件发送已保存的用户搜索信息:用户和愿望清单。

搜索信息包含书名等。

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

然后使用 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);

但没有什么能解决问题。

有任何想法吗?

非常感谢。

4

2 回答 2

1

With long running scripts, you need to make sure that connection is still open before running any queries. The best way to do so is to use something like mysql_ping() before your query.

Also, the mysql is rather old and inefficient. You should try to upgrade to mysqli.

于 2012-07-11T01:17:05.220 回答
0

你需要测试你能收到多少数据。

无论您的数据库机器是旧的还是您的结果行数是 1000000000000000000000+,您都需要使用分页修复您的查询:限制、游标等...

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

首先,检查您的行数

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

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

和...

ini_set('max_execution_time', 22222);

如您所知,它是客户端(PHP)配置,如果不允许使用 mysql-server 则无用。

于 2012-07-11T01:39:25.380 回答