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

wpcxdonn  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(457)

在php5我的程序工作时,当我改成php7时,表的内容没有显示出来。这就是错误
致命错误:e:\xampp\htdocs\account\classes\class.user.php第216行内存不足(已分配12582912)(尝试分配12582920字节)
代码错误

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;

}

bweufnob

bweufnob1#

这类错误的发生主要是因为以下三个原因之一:用大图像尝试时髦的东西、数据集太大或可用内存太少。
你不是在处理图像,所以这很简单。
对于“正常”编码,它通常不是内存限制,但至少要确保它不是。它通常是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和用户名创建一个概述,你不需要整个集合,只需要选择相关的信息。如果可以的话,把它分成小块,这样就可以清理内存了。

相关问题