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->nextRowset
(No version information available, might be only in CVS)
PDOStatement->nextRowset — Advances to the next rowset in a multi-rowset statement handle
Description
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.
Return Values
Returns TRUE on success or FALSE on failure.
Examples
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->fetch(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";
}
?>
The above example will output:
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
PDOStatement->nextRowset
24-Jan-2008 06:20
