2

我试图从 MySQL 表中获取数百万行到 PHP 我的应用程序。

获取数据的步骤如下。

  1. 使用 mysql_query() 或 mysqli_query() 向 mySQL 发送查询。

  2. 使用 mysql_fetch_array() 将结果设置为数组并循环每行。或使用 mysqli_fetch_all() 添加数组。

我收到了“内存不足”或“允许的内存大小为 * 字节已用尽”的消息。

如果我更改 'memory_limit' ,我可能能够解决它们。

但我想知道为什么显示这些消息。

我已将“memory_limit”更改为 128M-> 512M ->1024M。

当我设置 128M 时,发送查询失败,允许的内存大小为 *bytes 耗尽,我无法将结果添加到数组区域。

然后设置512M,查询成功完成,但我无法将结果添加到数组,允许的内存大小为*字节耗尽。

最后设置 1024M,发送查询和设置结果以将结果添加到数组都已完成。但有时 mysqli_fetch_all() 是内存不足的字段。

我无法理解的一件事是为什么内存不足不会经常发生?

我想知道的另一件事是如何将超过一百万行的整行从表中转换为 PHP 更少的内存转换。在获得整行后,我想让我的用户通过浏览器操作访问它们,包括下载某些类型的文件,如 csv。

4

2 回答 2

6

当所需的内存量超过 php.ini 文件中指定的内存限制时,您将获得“允许的内存大小为 * 字节已用完”。

当服务器本身(或 Apache 或 MySQL)内存不足时,您将得到“内存不足”。

于 2012-11-22T09:52:12.057 回答
1

检索大量行的最佳选择是在查询中使用limitandoffset并遍历它们。

这将防止您面临的内存问题。

于 2012-11-22T09:22:53.553 回答