gpt4 book ai didi

php - 由于 PHP 循环查询数据而导致内存耗尽

转载 作者:行者123 更新时间:2023-11-30 01:15:57 25 4
gpt4 key购买 nike

我有一些代码循环处理从数据库接收的数据,但问题是内存已耗尽。我的内存限制设置为 128 MB。我的测试返回的总行数约为 200k。所以我不知道是否数据太多,或者是否有办法缓冲表而不是立即将整个数据存储在内存中。

在 while 语句开始的行抛出内存耗尽错误。

    $queryResult = $dbCon->prepare( $sqlQuery );
$queryResult -> bindParam(':field1', $field1);
$queryResult -> bindParam(':field2', $field2);
$queryResult -> bindParam(':field3', $field3);
$queryResult -> execute();
$allData = array();
$i=0;
while ( $row = $queryResult->fetch(PDO::FETCH_ASSOC) )
{
foreach ( $row as $sKey=>$vVal )
{
if( $i == 0 )
{
$this->allHeaders[] = $sKey ;
}
$allData[ $i ][ $sKey ] = $vVal;
}
$i++;
}

最佳答案

这里有两个问题:

  • while 语句中的赋值...这是不好的做法,并且会导致问题
  • 直接对 SQL 结果集进行 foreach 迭代,即使您似乎使用了一些抽象层......这可以工作,但我不推荐它

如果你想避免内存问题(你的数据库有多大?几GB,我假设......)你只需要将结果集分割成 block (参见SQL-“LIMIT”语句)或迭代仅在处理完最后一个结果之后 - 因此您可以在一次迭代内完成需要完成的所有事情

关于php - 由于 PHP 循环查询数据而导致内存耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com