为什么139字节会耗尽33000000字节的内存

时间:2014-04-16 16:09:18

标签: php memory-management

我正在使用PHP PDO运行查询,该查询返回总共139个字节的关联数组。

当我将结果分配给while()循环中的值时,它无法说它耗尽了内存,但这没有意义。尝试的分配对可用的内容微不足道。

如果我在foreach()循环中运行它,它可以正常工作。

如果我ini_set('memory_limit', '-1');,页面永远不会加载。似乎存在无限循环。

是否有其他可能导致此错误被抛出的内容?在使用while()

时,会导致while($rows = $stmt->fetchAll())循环进入无限循环的原因

1 个答案:

答案 0 :(得分:0)

$stmt->fetchAll()返回如下数组:

array(
    array("id"=>1,"name"=>"Dave"),
    array("id"=>2,"name"=>"John")
)

即一组记录。

使用foreach遍历此数组。使用while不会。由于您的数组始终存在,while将始终为真!

foreach最常用,但你可以这样做:

$result = $stmt->fetchAll();
while($row = array_shift($result)) {  ...  }

这是有效的,因为$result数组将用完行,此时while将为false并结束。