Допустимый объем памяти 67108864 байт исчерпан
Должно быть, я прочитал все подобные посты здесь, но до сих пор не могу понять, почему это происходит.
Мой код:
$stmt = $this->db->stmt_init();
$stmt->prepare("SELECT Table1.id,Name,type,text,fname,lname FROM Table1, Table2 WHERE Table1.email = Table2.email AND type='text' AND Table1.Id=?");
$stmt->bind_param("i", $id);
$stmt->bind_result($legTxtId,$legTxtName, $legTxtType, $legTxtText, $legTxtFname, $legTxtLname);
$stmt->execute();
$results = array();
while($stmt->fetch())
{
$results[] = array(
'legTxtId' => $legTxtId , 'legTxtName' => $legTxtName , 'legTxtType' => $legTxtType ,
'legTxtText' => $legTxtText , 'legTxtFname' => $legTxtFname ,
'legTxtLname' => $legTxtLname );
}
$stmt->close();
return $results;
Теперь я использую точно такой же код в другой функции, которая вызывается до этой, и она отлично работает, даже если возвращает еще одно поле.
Этот, в частности, возвращает только 1 строку с простым коротким текстом (без фотографий или чего-либо), поэтому он не должен потерпеть неудачу, потому что он определенно меньше 64M.
Кто-нибудь может увидеть в чем проблема?
3 ответа
Как обсуждалось в другом вопросе, кажется, что есть два решения:
1) Переключитесь на соединитель mysqlnd, поскольку это не показывает ту же ошибку.
Если вы используете Yum для установки PHP (например, на сервере Amazon ec2), вы можете добиться этого, изменив настройки стека LAMP следующим образом:
sudo yum install php-mysql php php-xml php-mcrypt php-mbstring php-cli mysql httpd
чтобы:
sudo yum install php-mysqlnd php php-xml php-mcrypt php-mbstring php-cli mysql httpd
2) Используйте store_result или use_result, которые также не отображают проблему с большим выделением памяти.
Переключение на mysqlnd, вероятно, является лучшим долгосрочным решением, так как оно обычно лучше написано, чем существующий коннектор php-mysql (например, результаты не дублируются в памяти MySQL перед копированием в память PHP) и является коннектором по умолчанию из PHP 5.4.0. и далее.
Перемещение данных в локальный буфер может помочь:
// ...
$stmt->prepare(...);
$stmt->bind_param(...);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result(...);
// ...