Ответ 1
Оказывается, вам нужно использовать PDOStatement::nextRowset
.
$stmt = $db->query("SELECT 1; SELECT 2;");
$stmt->nextRowset();
var_dump( $stmt->fetchAll(PDO::FETCH_ASSOC) );
Это вернет результат для второго запроса.
Это немного странная реализация. Конечно, было бы проще, если бы оператор нескольких запросов просто возвращал оба набора результатов в один массив. Однако преимущество заключается в том, что эта реализация позволяет извлекать каждый запрос с использованием различных стилей FETCH.