【问题标题】:Why I get Allowed memory size of 134217728 bytes exhausted error为什么我得到允许的内存大小为 134217728 字节耗尽错误
【发布时间】:2016-04-06 13:37:10
【问题描述】:

我只是在我的代码中找不到任何错误。 array_push 方法出现的问题(134217728 字节的允许内存大小已用尽)。

代码:

<?php
    require "dbConnect.php";
    $username = $_POST['username'];

    if ($username != '') {
        $sql = "SELECT * FROM users WHERE username='$username'";

        $result = mysqli_query($con, $sql);
        $check = mysqli_fetch_array($result);
        $data = array();

        if (isset($check)) {
            echo "4";
            while ($row = mysqli_fetch_array($result)){
                echo "2";
                array_push ($data, array('name'=>$row[1], 'username'=>$row[2], 'password'=>$row[3], 'email'=>$row[4]));
            }

            echo json_encode(array("response"=>$data));
            mysqli_close($con);

        } else {
            echo "0";
        }
    } else {
        echo "3";
    }
?>

错误:

<br />
<b>Fatal error</b>:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 64 bytes) in <b>/home/u766232015/public_html/phpScripts/getUSerData.php</b> on line <b>14</b><br />

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    while() 循环永远不会停止循环,它内部没有任何改变。您需要将 mysqli_fetch_array 调用移动到循环条件,例如

    while ($row = mysqli_fetch_array($result)) {
      ...
    }
    

    【讨论】:

    • 谢谢,问题解决了,但现在还有一个问题。我从服务器返回一个空的 JSONObject ({"result":[]})。也许你知道为什么?
    【解决方案2】:

    您的脚本占用了太多内存。如果您的循环已经失控并且您在循环的每一次循环中创建对象或添加到数组中,这通常会在 PHP 中发生。

    在 SO 上查看此帖子: Allowed memory size of 33554432 bytes exhausted (tried to allocate 43148176 bytes) in php

    检查您的while() 是否不是无限循环;)

    【讨论】:

    • 谢谢这是问题
    • 在下面回答你的问题:你能在json_encode()之前做一个print_r($data);吗?
    • 其实程序并没有进入循环
    • $result = mysqli_query($con, $sql); => $con 在哪里?
    • $con 没有问题,因为我知道程序可以在我的表中找到用户名(程序可以进入'if(isset($check))')。问题来自循环。
    猜你喜欢
    • 2015-09-23
    • 2012-08-29
    • 2011-02-23
    • 2016-04-13
    • 2017-08-26
    • 2015-07-06
    • 2016-12-11
    • 2017-01-05
    • 2011-07-30
    相关资源
    最近更新 更多