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 — 複数の行セットを返す文ハンドラで次の行セットに移動する
説明
bool PDOStatement::nextRowset
( void
)
いくつかのデータベースサーバは、1つ以上の行セット (結果セットとしても知られる) を返すストアドプロシージャをサポートしています。 PDOStatement::nextRowSet() により、2 番目以降の PDOStatement オブジェクトに関連する行セットにアクセスすることができます。 それぞれの行セットは、 前の行セットと異なるカラムセットを含むことができます。
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例
例1 ストアドプロシージャから複数の行セットをフェッチする
以下のサンプルは、3つの行セットを返すストアドプロシージャの コールの仕方を示しています。 PDOStatement::nextRowset() を併用した do / while ループを使用しており、行セットが返されなくなったとき false を返しループを終了します。
<?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";
}
?>
上の例の出力は以下となります。
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
dev at NOSPAMbcdiv dot com
24-Jan-2008 03:20
24-Jan-2008 03:20
