Неустранимая ошибка: недостаточно памяти (выделено 12582912) (попытка выделить 12582920 байт)

0

в 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;

}

  • 0
    Сколько строк это извлекает? Вы спрашиваете базу данных - но выбрасываете результат - Почему? Каков средний размер объекта User после его заполнения? Что делает User :: populate ()? Какова ваша максимальная установка? Каково максимальное использование скрипта при его запуске в PHP 5?
  • 0
    (намекните, что это 6 вопросов, которые могут дать нам некоторое представление о том, что происходит)
Показать ещё 5 комментариев
Теги:
mysqli
php-7

1 ответ

0

Этот тип ошибок в основном происходит из-за одной из трех причин: Попытка фанки с большими изображениями, слишком большой набор данных или слишком мало доступной памяти.

Вы не работаете с изображениями, так что это легко.
С "нормальным" кодированием часто это не memory_limit, но, по крайней мере, убедитесь, что это не так. Это часто 128 Мбайт или выше, и даже если это немного ниже, вы код не должен потреблять столько.

Так что, скорее всего, объем данных. Продолжая оттуда:
Тот факт, что точка переполнения не означает, что эта причина является причиной этого. Это могут быть "другие функции", которые заполняли ведро до края, и эта часть кода была "последней каплей".

Поскольку он пытается выделиться на 12 Мбайт больше, а затем уже есть, есть хороший шанс, что это цикл. Большинство переменных в области функций небольшие, кроме $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;

Если этого недостаточно, сверните данные. Если вы создаете обзор с идентификатором и именем пользователя, вам не нужен весь набор, выберите только соответствующую информацию. Если можно, сломайте его на куски, чтобы можно было очистить память.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню