PHP 8.3.7 Released!

PDOStatement::nextRowset

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

PDOStatement::nextRowset Avança para o próximo conjunto de registros em um identificados de instrução com múltiplos conjuntos de registros

Descrição

public PDOStatement::nextRowset(): bool

Alguns servidores de bancos de dados suportam procedimentos armazenados que retornam mais de um conjunto de registros (também conhecido como conjunto de resultados). PDOStatement::nextRowset() habilita o acesso ao segundo conjunto de registros, e subsequentes, associados com um objeto PDOStatement. Cada conjunto de registros pode ter um conjunto diferente de colunas em relação ao conjunto anterior.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Exemplos

Exemplo #1 Buscando múltiplos conjuntos de registros de um procedimento armazenado

O exemplo a seguir mostra como chamar um procedimento armazenado, MULTIPLE_ROWSETS, que retorna três conjuntos de registros. É usado um laço do-while para chamar o método PDOStatement::nextRowset() até que ele retorne false e termine o laço quando não houver mais conjuntos de registros disponíveis.

<?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";
}
?>

O exemplo acima produzirá:

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

Veja Também

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