PHP查询MySQL中大量数据的解决方案,从而导致内存不足。
本文的示例分析了PHP查询大量MySQL数据导致内存不足的解决方案,供大家参考,具体分析如下:首先,问题
当使用PHP查询MySQL的大量数据时,程序没有执行,并发出警告。
致命错误:允许内存大小为100663296字节耗尽(试图分配103字节)
错误提示:PHP分配的100M内存占用。
两。解决方案:
最简单的解决方案是执行文件头的增加:
ini_set('memory_limit ','256m);
添加内存256M以上可以增加使用PHP的内存空间
但是下一次如果你想读更多的数据,你不能一次又一次地做,导致服务器的内存被PHP吃掉。
这里有一个函数:
使用memory_get_usage()得到的PHP内存使用量的方法。发现读数据条数增加,内存使用的PHP逐步增加。
PHP中的数据是否存储在查询MySQL中搜索发现这是真正的意义。
MySQL的C API函数有mysql_use_result()和()mysql_store_result
mysql_store_result()读取从mysqlserver到客户端的结果,和mysql_use_result()只读取元数据信息的结果集
1、PHP的mysql_query电话mysql_store_result(),自动获取并缓存结果集
2,和PHP的另一个功能是mysql_unbuffered_query(),被称为mysql_use_result()。一方面,它在处理大型结果集时节省了大量的内存;另一方面,您可以在获取第一行之后立即操作结果集,而不必等待整个SQL语句完成。
所以当我们读了很多的数据,我们可以使用mysql_unbuffered_query()而不是mysql_query()。这是真的,测试是真的,很可怕,指导所有数据存储一直保持在1MB,没有增长
mysql_unbuffered_query()发送一个SQL查询,查询到MySQL,但不会自动获取和缓存设置mysql_query结果()。另一方面,这将节省大量的内存在处理大型结果集。另一方面,你可以设置到第一行没有等待整个SQL语句完成后立即的结果。当多个数据库连接时,必须指定一个可选的参数link_identifier。
mysql_unbuffered_query的好处()是昂贵的:mysql_num_rows()和()mysql_data_seek不能使用返回的结果集mysql_unbuffered_query()。此外,在发送一个新的SQL查询,MySQL,有必要从所有SQL查询缓存提取结果行不。
所以一定要选择适合你业务需求的功能。
希望本文能对大家的PHP程序设计有所帮助。