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 — Avança para o próximo conjunto de registros em um identificados de instrução com múltiplos conjuntos de registros
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.
Esta função não possui parâmetros.
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
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);
?>