2012-06-30 4 views
13

PHPのバージョン5.3以降PDO_MYSQLドライバはPDO_MYSQLNDのために再開されました。複数のクエリのサポートが導入されました。PDO複数のクエリ

SELECTクエリが渡された場合、両方の結果セットを取得する方法はわかりませんが、両方のクエリが実行されましたが、2番目のクエリがダンプされたということはできません。

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

戻り値:

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

複数のクエリ(PDO_MYSQL、PDO_MYSQLND)に対する[PDOサポート]の複製可能性(http://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo-mysqlnd) –

+0

@ FrancisAvilaそれはまた私の質問であり、重複ではありません。私は答えを見つけた。 1秒後に投稿されます。 – Gajus

答えて

20

それはあなたがPDOStatement::nextRowsetを使用する必要があることが判明しました。

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

これは、2番目のクエリの結果を返します。

少し奇妙な実装です。マルチクエリ文が両方の結果セットを1つの配列の下に返すだけであれば、確かに簡単です。ただし、この実装では、異なるクエリFETCH stylesを使用してすべてのクエリをフェッチできます。