PHP致命错误 - 内存不足 - 试图分配4294967293字节

时间:2012-12-19 09:36:39

标签: php sql memory-management

我有一个从SQL DB获取数据的PHP函数。有时我在做odbc_result时会遇到这个致命的错误

  • 步骤30从60 |记忆191908
  • 步骤31从60 |记忆191908
  • 步骤32从60 |记忆191908
  • 步骤33从60 |记忆191908
  • 步骤34从60 |记忆191892
  • 步骤35从60 |记忆191908
  • 步骤36从60 |记忆191908
  • 步骤37从60 |记忆191892
  • 步骤38从60 |记忆191908
  • 步骤39从60 |记忆191908
  • PHP致命错误:内存不足(已分配262144)(尝试分配4294967293字节)

这是函数输出的一部分。

有人可以帮我解决这个问题吗?

          while(odbc_fetch_row($exec_query_tblKlantFactuurOpdrachten))
    {
        $dataADDRow_1 = $doc->createElement("tblKlantFactuurOpdrachten");
        $dataADDRow->appendChild($dataADDRow_1);

        $i_1 = 1;
        while($i_1 < $numFields_1)
        {
            echo "Step ".$i_1." from ".$numFields_1." | Memory ".memory_get_usage()."\n";
            $dataFromDB = odbc_result($exec_query_tblKlantFactuurOpdrachten,$i_1);
            $dataADD = $doc->createElement($tmpArr_FieldName_1[$i_1],protectInfo($dataFromDB));
            $dataADDRow_1->appendChild($dataADD);
            flush();
            ++$i_1;
        }
        flush();

    }

我已经重新尝试通过简单的查询从数据库获取数据,当我尝试获得相同的确切字段时,我也得到了该错误。所以它似乎与DB和PHP之间的关系有关。我在linux服务器上使用freetds驱动程序。

当我使用SQL Server Management获取数据时没有问题。

2 个答案:

答案 0 :(得分:1)

它可能与一个无休止的循环或一些递归调用的函数有关,它不断分配数据。

您可以尝试:

ini_set('memory_limit', '-1');

但如果我是对的,你会再次收到错误。如果是这样,那么寻找循环和递归调用。

答案 1 :(得分:0)

这似乎是PHP处理ODBC的错误。

类似的东西: https://bugs.php.net/bug.php?id=51606

尝试那里给出的补丁