PHP+PDO Mysql, не выполняются query после exec с несколькими запросами внутри?

После выполнения запроса вида

$db->exec('UPDATE as SET b=c WHERE d=1; UPDATE as SET b=e WHERE d=2; UPDATE as SET b=f WHERE d=3');<br>


попытка выполнить

$db->query('SELECT * FROM e') ;<br>

возвращает false вместо PDOStatement.

$db->errorInfo() возвращает

Array<br>
(<br>
    [0] => HY000<br>
    [1] => 2014<br>
    [2] => Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.<br>
)<br>




Насколько я понял, множественные запросы в exec передают результат выполнения каждого в буфер PDO, который надо очистить через fetchAll(). Вот только объект PDOStatement мне после exec не возвращается, да и не должен по документации.

Возможно ли одним exec выполнить несколько запросов, что бы потом не забивался буфер?

Либо возможно ли как-то этот буфер очистить после выполнения нескольких запросов через один exec?
  • Вопрос задан
  • 4570 просмотров
Решения вопроса 1
@WEBIVAN Автор вопроса
Решение оказалось очевидным. Вместо
$db->exec('UPDATE as SET b=c WHERE d=1; UPDATE as SET b=e WHERE d=2; UPDATE as SET b=f WHERE d=3');

пишем
$db->query('UPDATE as SET b=c WHERE d=1; UPDATE as SET b=e WHERE d=2; UPDATE as SET b=f WHERE d=3')->fetchAll(PDO::FETCH_NUM);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Я бы предпочёл юзать PDOStatement в любом случае.

$sth = $db->prepare($sql);
$sth->execute($params);
$sth->closeCursor();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы