我试图从MySQL表中获取数百万行到PHP我的应用程序。
获取数据的步骤如下所示。
使用mysql_query()或mysqli_query()发送查询到mySQL。
使用mysql_fetch_array()将结果设置为数组并循环每一行。或者使用mysqli_fetch_all()添加数组。
我将消息“内存不足”或“允许*字节耗尽的内存大小”。
如果我改变'memory_limit',我或许可以解决它们。
但我想知道为什么会显示这些消息。
我已将'memory_limit'改为128M-> 512M - > 1024M。
当我设置128M时,发送查询失败,允许的内存大小为* bytes耗尽,我无法将结果添加到数组区域。
然后设置512M,查询成功完成但我无法将结果添加到允许*字节耗尽的内存大小的数组。
最后设置1024M,发送查询和设置结果以将结果添加到数组都已完成。但有时mysqli_fetch_all()是带有内存不足的字段。
我无法理解的一件事是为什么内存不会经常发生?
我想知道的另一件事是如何从表中将整行超过一百万行转换为PHP减少内存转换。获取完整行后,我希望让我的用户通过浏览器操作访问它们,包括下载某些类型的文件,如csv。
答案 0 :(得分:5)
当所需的内存量超过php.ini文件中指定的内存限制时,您将获得“允许的内存大小为* bytes exhausted”。
当服务器本身(或Apache或MySQL)内存不足时,您将获得“内存不足”。
答案 1 :(得分:1)
检索大量行的最佳选择是在查询中使用limit
和offset
并循环遍历它们。
这样可以防止您遇到的内存问题。