PHP 8.3.4 Released!

PDOStatement::nextRowset

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)

PDOStatement::nextRowset Avanza hasta el siguiente conjunto de filas de un gestor de sentencia multiconjunto de filas

Descripción

public PDOStatement::nextRowset(): bool

Algunas bases de datos admiten procedimientos almacenados que devuelve más de un conjunto de filas (también conocido como conjunto de resultados). Con PDOStatement::nextRowset() se puede accedar al segundo y subsiguiente conjunto de filas asociado con un objeto PDOStatement. Cada conjunto de filas puede tener un conjunto de columnas diferente del conjunto de filas precedente.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Obtener múltiples conjuntos de filas devueltas por un procedimiento almacenado

El siguiente ejemplo muestra cómo llamar a un procedimiento almacenado, MULTIPLE_ROWSETS, que devuelve tres conjuntos de filas. Se usa un bucle do / while para iterar sobre el método PDOStatement::nextRowset(), el cual devuelve false y finaliza el bucle cuando no se pueden devolver más conjuntos de filas.

<?php
$sql
= 'CALL multiple_rowsets()';
$sentencia = $conexión->query($sql);
$i = 1;
do {
$conjunto_filas = $sentencia->fetchAll(PDO::FETCH_NUM);
if (
$conjunto_filas) {
printResultSet($conjunto_filas, $i);
}
$i++;
} while (
$sentencia->nextRowset());

function
printResultSet(&$conjunto_filas, $i) {
print
"Conjunto de resultados $i:\n";
foreach (
$conjunto_filas as $fila) {
foreach (
$fila as $columna) {
print
$columna . "\t";
}
print
"\n";
}
print
"\n";
}
?>

El resultado del ejemplo sería:

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

Ver también

add a note

User Contributed Notes 3 notes

up
3
guilleamathews at gmail dot com
12 years ago
PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
up
-1
et dot coder at gmail dot com
9 years ago
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);
?>
up
-6
alex at 1stleg dot com
7 years ago
If you use PDO::fetch instead of PDO::fetchAll and do not reach the end the result set, PDO::nextRowset() will fail with "SQLSTATE[HY000]: General error: PDO_DBLIB: dbresults() returned FAIL."
To Top