PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)
PDOStatement::nextRowset — Avance al siguiente conjunto de resultados de un manejador de conjuntos de resultados múltiples
Algunas bases de datos soportan procedimientos almacenados que retornan más de un conjunto de resultados (también conocido como juegos de resultados). PDOStatement::nextRowset() permite acceder al segundo y siguientes conjuntos de resultados asociados con el objeto PDOStatement. Cada conjunto de resultados tiene diferentes juegos de columnas desde el conjunto de resultados.
Esta función no contiene ningún parámetro.
Ejemplo #1 Recuperación de múltiples conjuntos de resultados retornados por un procedimiento almacenado
El siguiente ejemplo muestra cómo llamar a un procedimiento almacenado,
MULTIPLE_ROWSETS
, que retorna tres conjuntos de resultados.
Un ciclo do-while
es utilizado para recorrer el método
PDOStatement::nextRowset(), que retorna false
y
termina el ciclo cuando no hay más conjuntos de resultados disponibles.
<?php
$sql = 'CALL multiple_rowsets()';
$stmt = $conn->query($sql);
$i = 1;
do {
$rowset = $stmt->fetchAll(PDO::FETCH_NUM);
if ($rowset) {
printResultSet($rowset, $i);
}
$i++;
} while ($stmt->nextRowset());
function printResultSet(&$rowset, $i) {
print "Conjunto de resultados $i:\n";
foreach ($rowset as $row) {
foreach ($row as $col) {
print $col . "\t";
}
print "\n";
}
print "\n";
}
?>
El ejemplo anterior mostrará :
Conjunto de resultados 1: apple red banana yellow Conjunto de resultados 2: orange orange 150 banana yellow 175 Conjunto de resultados 3: lime green apple red banana yellow
PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
on MSSQL and 'dsn' => 'dblib:...',:
If you know how many count rowset then don't use contruction of do..while.
<?php
do {
$pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
} while (
$pdoStatement->nextRowset()
);
?>
When I get large fetchAll(over 30) for second nextRowset. I get error - Segmentation fault.
Uses step-by-step insted do..while is fix for this bug:
<?php
$pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
$pdoStatement->nextRowset();
$pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
?>