PDOStatement->nextRowset()

(PHP 5 >= 5.1.0, PECL pdo:0.2-1.0.3)

PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset statement handle

Descrição

PDOStatement
bool nextRowset ( void )

Some database servers support stored procedures that return more than one rowset (also known as a result set). PDOStatement->nextRowset() enables you to access the second and subsequent rowsets associated with a PDOStatement object. Each rowset can have a different set of columns from the preceding rowset.

Valor Retornado

Retorna TRUE em caso de sucesso ou FALSE em falhas.

Exemplos

Example#1 Fetching multiple rowsets returned from a stored procedure

The following example shows how to call a stored procedure, MULTIPLE_ROWSETS, that returns three rowsets. We use a do / while loop to loop over the PDOStatement->nextRowset() method, which returns false and terminates the loop when no more rowsets can be returned.

<?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 
"Result set $i:\n";
    foreach (
$rowset as $row) {
        foreach (
$row as $col) {
            print 
$col "\t";
        }
        print 
"\n";
    }
    print 
"\n";
}
?>

O exemplo acima irá imprimir:

Result set 1:
apple    red
banana   yellow

Result set 2:
orange   orange    150
banana   yellow    175

Result set 3:
lime     green
apple    red
banana   yellow



User Contributed Notes
PDOStatement->nextRowset()
dev at NOSPAMbcdiv dot com
24-Jan-2008 04:20
Unfortunately nextRowset() apparently is not implemented in PHP 5.2.5*  -- returns "SQLSTATE[HYC00]: Optional feature not implemented".

So stored procedures returning multiple recordsets only return the first recordset. Using nextRowset() to move to the next recordset only returns the optional feature error above.

Hopefully this will save someone else from spinning their wheels for days trying to find a way to get it to work -- apparently it doesn't yet and several bugs remain open relating to the nextRowset() PDO feature.

*w/ This Environment:
Apache 2.0.61 (Win32), PHP 5.2.5, PDO Driver for MySQL client library version 5.0.45, MySQL 5.0.45

PDOStatement->rowCount()> <PDOStatement->getColumnMeta()
Last updated: Mon, 28 Dec 2009