为什么我得到允许的内存大小为134217728字节耗尽错误

时间:2016-04-06 13:37:11

标签: php arrays

我在代码中找不到任何错误。 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 />

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您的脚本使用了太多内存。如果您的循环已经失控并且您正在循环的每次传递中创建对象或添加到数组,那么这通常可以在PHP中发生。

在SO上看到这篇文章: Allowed memory size of 33554432 bytes exhausted (tried to allocate 43148176 bytes) in php

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