【问题标题】:How to fix a PHP Memory Error when running a function运行函数时如何修复 PHP 内存错误
【发布时间】:2020-09-24 02:08:04
【问题描述】:

运行 PHP 函数时出现内存错误。

错误显示为...

致命错误:允许的内存大小为 268435456 字节已用尽(尝试分配 4294967296 字节)

PHP 脚本是...

function getPageContent($page) {

    //Open a new connection to the MySQL server
    $mysqli = new mysqli('localhost','MY_USER','MY_PASS','MY_DATABASE');
    $account = MY_ACCOUNT_NUMBER;
    $project = 1;

    if($stmt=$mysqli->prepare("SELECT content FROM pages WHERE account_id=? AND id=? LIMIT 1")){

        $stmt-> bind_param("ii", $account, $page);

        // Execute
        $stmt-> execute();

        // Bind results
        $stmt-> bind_result($content);

        // Fetch value
        while ( $stmt-> fetch() ) {
          echo $content;
    }

    // Close statement
    $stmt-> close();
    $mysqli-> close();
    }

}

这是说错误与 PHP 代码中的 bind_result 函数有关。我坚持这一点。我尝试在 PHP.ini 中增加我的内存限制,但这没有用,无论如何我不应该占用那么多内存。

【问题讨论】:

  • 要么是因为我的疲倦状态,但我怀疑这个功能会导致问题 - 至少我在这里看不到明显的错误。您是否在循环中执行任何其他可能无休止地运行的事情?
  • 我还有另一个几乎相同的函数来获取页面的标题,但我能想到的就这些了。
  • 请看手册中的memory_get_peak_usage()memory_get_usage() php.net/manual/de/function.memory-get-peak-usage.php 放入调用该函数的脚本,然后与分配的内存进行比较,看是否一致
  • 我做了,但似乎没有给我任何线索。 PHP 函数仍在尝试使用 4294967296 字节,这只是没有意义为什么它会尝试使用那么多内存。
  • 发生此错误时,通常某些东西会无限期地运行。因此,您可以休息一下;一个一个地进入每个循环,并确定哪个循环导致了问题。如果您的 while 循环中的中断解决了问题,那么这里可能会出现问题,但我现在没有发现它。

标签: php mysql mysqli


【解决方案1】:

我想通了!您必须在 bind_param 之前存储结果...

$stmt-> store_result();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多