2024 日本 PHP 研討會

PDOStatement::nextRowset

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

PDOStatement::nextRowset 前進到多行集陳述式控制碼中的下一個行集

說明

public PDOStatement::nextRowset(): bool

某些資料庫伺服器支援傳回多個行集(也稱為結果集)的預存程序。 PDOStatement::nextRowset() 讓您可以存取與 PDOStatement 物件關聯的第二個和後續行集。每個行集可以與前一個行集具有不同的欄位集。

參數

此函式沒有參數。

傳回值

成功時返回 true,失敗時返回 false

範例

範例 #1 從預存程序返回多個結果集

以下範例顯示如何呼叫一個名為 MULTIPLE_ROWSETS 的預存程序,該程序返回三個結果集。我們使用 do-while 迴圈來呼叫 PDOStatement::nextRowset() 方法,直到它返回 false 並在沒有更多結果集可用時終止迴圈。

<?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
"結果集 $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

另請參閱

新增註釋

使用者貢獻的註釋 2 則註釋

guilleamathews at gmail dot com
13 年前
Firebird PDO 驅動程式目前似乎不支援 PDO::nextRowset()。真可惜。
et dot coder at gmail dot com
10 年前
在 MSSQL 上以及 'dsn' => 'dblib:...'
如果您知道結果集的數量,就不要使用 do...while 迴圈。

<?php
do {
$pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
} while (
$pdoStatement->nextRowset()
);
?>
當我使用 fetchAll 取得大量資料 (超過 30 筆) 給第二個 nextRowset 時,會出現 Segmentation fault 錯誤。

使用逐步執行而不是 do...while 迴圈可以修正這個錯誤
<?php
$pdoStatement
->fetchAll(\PDO::FETCH_ASSOC);
$pdoStatement->nextRowset();
$pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
?>
To Top