Подтвердить что ты не робот

Множественные запросы PDO

С версии PHP версии 5.3 PDO_MYSQL драйвер был перезаписан в пользу PDO_MYSQLND. Он ввел поддержку для нескольких запросов.

Хотя, я не могу понять, как получить оба набора результатов, если было передано более одного запроса SELECT. Оба запроса выполнены, это не может быть так, что второй был просто сброшен.

$db->query("SELECT 1; SELECT 2;")->fetchAll(PDO::FETCH_ASSOC);

Возврат:

array(1) {
  [0]=>
  array(1) {
    [1]=>
    string(1) "1"
  }
}
4b9b3361

Ответ 1

Оказывается, вам нужно использовать PDOStatement::nextRowset.

$stmt   = $db->query("SELECT 1; SELECT 2;");
$stmt->nextRowset();
var_dump( $stmt->fetchAll(PDO::FETCH_ASSOC) );

Это вернет результат для второго запроса.

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