致命错误:内存不足(已分配12582912)(试图分配12582920字节)

时间:2018-06-25 08:30:15

标签: mysql mysqli php-7

在php5我的程序中它的工作,当我变成php7时,表的内容没有显示。这是错误

  

致命错误:内存不足(已分配12582912)(尝试分配   12582920字节)在E:\ xampp \ htdocs \ account \ classes \ class.user.php中   第216行

代码错误

for ($i=0; ($row = Sql::fetch_array($resource)) !== FALSE; $i++) {

                $users[$i] = new User($row["userId"], $dealerId);
                $users[$i]->populate();

这是公共静态公共静态函数getAllUsers($ dealerId)的完整代码

 public static function getAllUsers($dealerId) {

    $users = array();


    $sql_query = "SELECT userId FROM dealer_users WHERE dealerId='".$dealerId."' ORDER BY username ASC";
    $sql_query_1 = "SELECT COUNT(*) FROM dealer_users WHERE dealerId='".$dealerId."'";

    self::$lastCount = Sql::fetch_first_row_column($sql_query_1);

    $resource = Sql::query($sql_query) or die(mysqli_error($sql_query));

    for ($i=0; ($row = Sql::fetch_array($resource)) !== FALSE; $i++) {

        $users[$i] = new User($row["userId"], $dealerId);
        $users[$i]->populate();
    }


    Sql::free_result($resource);

    return $users;

}

1 个答案:

答案 0 :(得分:0)

这种类型的错误主要是由于以下三个原因之一引起的:尝试使用大图像,数据集太大或可用内存太少的时髦东西。

您不使用图像,这很容易。
对于“普通”编码,通常不是memory_limit,但至少要确保它不是。它通常为128MB或更高,即使它稍低一些,您的代码也不应消耗太多。

所以可能是数据量。从那里继续:
那就是溢出的事实,并不意味着该功能就是它的原因。可能是“其他功能”将内容塞满了边缘,而特定的代码段是“最后一滴”。

由于它正在尝试分配比现有容量更多的12MB内存,因此很有可能是循环。除$users外,函数作用域中的大多数变量都很小。您使用class User()加载。这是大班吗?如果是这样,那就是您的问题。

// A small improvement might be setting it to a single user first, mutate that small variable, and push the result to the array:  
$newUser = new User($row["userId"], $dealerId);
$newUser->populate();
$users[$i] = $newUser;

如果这还不够,请最小化数据。如果使用ID和用户名创建概览,则不需要整个设置,只需选择相关信息即可。如果可以的话,请将其分成几块,以便清除内存。