PDOStatement::nextRowset

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

PDOStatement::nextRowset — Avance Ă  la prochaine ligne de rĂ©sultats d'un gestionnaire de lignes de rĂ©sultats multiples

Description

public function PDOStatement::nextRowset(): bool

Quelques bases de données supportent les procédures stockées qui retournent plus d'une ligne de résultats (aussi connu comme des jeux de résultats). PDOStatement::nextRowset() permet d'accéder à la seconde et suivantes lignes de résultats associées avec l'objet PDOStatement. Chaque ligne de résultats a des jeux différents de colonnes depuis la ligne de résultats.

Liste de paramĂštres

Cette fonction ne contient aucun paramĂštre.

Valeurs de retour

Cette fonction retourne true en cas de succĂšs ou false si une erreur survient.

Exemples

Exemple #1 Récupération de multiples lignes de résultats retournées par une procédure stockée

L'exemple suivant montre comment appeler une procédure stockée, MULTIPLE_ROWSETS, qui retourne trois lignes de résultats. Une boucle do-while est utilisée pour parcourir la méthode PDOStatement::nextRowset(), qui retourne false et termine la boucle quand il n'y a plus de ligne de résultats disponible.

<?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
"Jeu de résultats $i:\n";
foreach (
$rowset as $row) {
foreach (
$row as $col) {
print
$col . "\t";
}
print
"\n";
}
print
"\n";
}
?>

L'exemple ci-dessus va afficher :

Jeu de résultats 1:
apple    red
banana   yellow

Jeu de résultats 2:
orange   orange    150
banana   yellow    175

Jeu de résultats 3:
lime     green
apple    red
banana   yellow

Voir aussi

add a note

User Contributed Notes 2 notes

up
2
guilleamathews at gmail dot com ¶
14 years ago
PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
up
-2
et dot coder at gmail dot com ¶
11 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);
?>