в 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;
}
Этот тип ошибок в основном происходит из-за одной из трех причин: Попытка фанки с большими изображениями, слишком большой набор данных или слишком мало доступной памяти.
Вы не работаете с изображениями, так что это легко.
С "нормальным" кодированием часто это не 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;
Если этого недостаточно, сверните данные. Если вы создаете обзор с идентификатором и именем пользователя, вам не нужен весь набор, выберите только соответствующую информацию. Если можно, сломайте его на куски, чтобы можно было очистить память.