2012-06-30 13 views
13

A partir de PHP versión 5.3 PDO_MYSQL controlador se ha reposicionado a favor de PDO_MYSQLND. Introdujo soporte para múltiples consultas.PDO consultas múltiples

Sin embargo, no puedo encontrar la forma de obtener ambos conjuntos de resultados si se ha pasado más de una consulta SELECT. Ambas consultas se han ejecutado, no puede ser que la segunda haya sido abandonada.

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

Devuelve:

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

posible duplicado de [consultas PDO para múltiples consultas (PDO_MYSQL, PDO_MYSQLND)] (http://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo-mysqlnd) –

+0

@FrancisAvila Esa es también mi pregunta y no un duplicado. Encontré la respuesta. Publicaremos en un segundo. – Gajus

Respuesta

20

Resulta que es necesario utilizar PDOStatement::nextRowset.

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

Esto devolverá el resultado para la segunda consulta.

Es una implementación un poco extraña. Sin duda sería más fácil si la instrucción de múltiples consultas devolviera ambos conjuntos de resultados en una matriz. Sin embargo, la ventaja es que esta implementación permite buscar cada consulta usando FETCH styles diferente.

Cuestiones relacionadas