我在查询中有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);
但没有什么能解决这个问题。
有什么想法吗?
非常感谢。
答案 0 :(得分:1)
使用长时间运行的脚本,您需要确保在运行任何查询之前连接仍处于打开状态。最好的方法是在查询之前使用mysql_ping()
之类的内容。
此外,mysql
相当陈旧且效率低下。您应该尝试升级到mysqli
。
答案 1 :(得分:0)
您需要测试可以接收的数据量。
您的数据库计算机是旧的还是结果行数是1000000000000000000000+, 你需要使用paging:limit,cursor等来修复你的查询......
它不是您问题的直接解决方案。
首先,使用
检查行数SELECT COUNT(*) FROM wishlist WHERE uid = " . $sendtouser . "
检查删除ORDER BY短语,如果确定,请重新安排PHP代码。有时它可能会有所帮助。
和...
ini_set('max_execution_time', 22222);
它是客户端(PHP)配置,如果你知道的话,如果不允许mysql-server,它就没用了。