Mysql обновление php с переходом на mysqlnd приводит к memory allocation error

grigori

( ͡° ͜ʖ ͡°)
Команда форума
тестировали новый сервер с php 5.4.11 - скрипт начал падать с "PHP Fatal error: Allowed memory size" на $PDOStatement->execute();
вспомнил про константу, проверил - интересно!
оказывается, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY по дефолту 1, и вместе с mysqlnd это приводит к Fatal Error на больших выборках,
а раньше не приводило - старый драйвер mysql результат в памяти базы держал, видимо, или его данные в памяти не учитывались скриптом

PHP:
<?php
$db = new PDO('mysql:host=10.0.0.18;dbname=newrpc');
$flag = $db->getAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY);
var_dump($flag);
[grigori@newrpc newrpc.dev-02.sotmarket.ru]$ php testsql.php
int(1)
не забывайте при работе с PDO перед большой выборкой выставлять
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
 
  • Like
Реакции: WMix

флоппик

promotor fidei
Команда форума
Партнер клуба
Я что-то путаю, или с небуферизироваными запросами нужна некоторая осторожность и очистка результата?
 

tony2001

TeaM PHPClub
ну в общем, да, в этом одно из основных отличий mysqlnd от libmysql - он выделяет память через PHP-шный аллокатор, поэтому она учитывается в memory_limit.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
флоппик да, нужна, но без него - Fatal Error, и все
 

Gas

может по одной?
а можно поподробнее какая осторожность нужна?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Сверху