2024 年 PHP Conference Japan

db2_next_result

(PECL ibm_db2 >= 1.0.0)

db2_next_result 從預存程序請求下一個結果集

說明

db2_next_result(資源 $stmt): 資源|false

預存程序可以返回零個或多個結果集。 雖然您可以用處理簡單 SELECT 陳述式所返回結果完全相同的方式來處理第一個結果集,但要從預存程序提取第二個和後續的結果集,您必須呼叫 db2_next_result() 函式,並將結果返回到一個唯一命名的 PHP 變數。

參數

stmt

一個由 db2_exec()db2_execute() 返回的已準備好的陳述式 (prepared statement)。

回傳值

如果儲存程序返回另一個結果集,則返回一個包含下一個結果集的新陳述式資源。如果儲存程序沒有返回另一個結果集,則返回 false

範例

範例 #1 呼叫返回多個結果集的儲存程序

在以下範例中,我們呼叫一個返回三個結果集的儲存程序。第一個結果集直接從我們呼叫 CALL 陳述式的相同陳述式資源中擷取,而第二個和第三個結果集則從我們呼叫 db2_next_result() 函式所返回的陳述式資源中擷取。

<?php
$conn
= db2_connect($database, $user, $password);

if (
$conn) {
$stmt = db2_exec($conn, 'CALL multiResults()');

print
"擷取第一個結果集\n";
while (
$row = db2_fetch_array($stmt)) {
var_dump($row);
}

print
"\n擷取第二個結果集\n";
$res = db2_next_result($stmt);
if (
$res) {
while (
$row = db2_fetch_array($res)) {
var_dump($row);
}
}

print
"\n擷取第三個結果集\n";
$res2 = db2_next_result($stmt);
if (
$res2) {
while (
$row = db2_fetch_array($res2)) {
var_dump($row);
}
}

db2_close($conn);
}
?>

以上範例將輸出

Fetching first result set
array(2) {
  [0]=>
  string(16) "Bubbles         "
  [1]=>
  int(3)
}
array(2) {
  [0]=>
  string(16) "Gizmo           "
  [1]=>
  int(4)
}

Fetching second result set
array(4) {
  [0]=>
  string(16) "Sweater         "
  [1]=>
  int(6)
  [2]=>
  string(5) "llama"
  [3]=>
  string(6) "150.00"
}
array(4) {
  [0]=>
  string(16) "Smarty          "
  [1]=>
  int(2)
  [2]=>
  string(5) "horse"
  [3]=>
  string(6) "350.00"
}

Fetching third result set
array(1) {
  [0]=>
  string(16) "Bubbles         "
}
array(1) {
  [0]=>
  string(16) "Gizmo           "
}

新增筆記

使用者貢獻的筆記 1 則筆記

matthewv at ca dot ibm dot com
16 年前
一些不那麼明顯但重要的注意事項

1) 擷取下一個結果集時,必須一律使用原始的陳述式回傳值。
2) 如果您希望存取另一個結果集,則不能移除先前結果集的參考。

----------------無法正常運作-------------------------
<?php
$originalStatementReturn
= db2_exec($conn, 'CALL multiResults()');

$firstResultHolder = db2_next_result($originalStatementReturn);

$secondResultHolder = db2_next_result($firstResultHolder);

if (
$secondResultHolder) {
while (
$row = db2_fetch_array($secondResultHolder)) {
print_r($row);
}
}
?>
-----------------------------------------------------------------

----------------無法正常運作-------------------------
<?php
$originalStatementReturn
= db2_exec($conn, 'CALL multiResults()');

$resultHolder = db2_next_result($originalStatementReturn);

$resultHolder = db2_next_result($originalStatementReturn);

if (
$resultHolder) {
while (
$row = db2_fetch_array($resultHolder)) {
print_r($row);
}
}
?>
-----------------------------------------------------------------

----------------可以正常運作--------------------------------
<?php
$originalStatementReturn
= db2_exec($conn, 'CALL multiResults()');

$firstResultHolder = db2_next_result($originalStatementReturn);

$secondResultHolder = db2_next_result($originalStatementReturn);

if (
$secondResultHolder) {
while (
$row = db2_fetch_array($secondResultHolder)) {
print_r($row);
}
}
?>
-----------------------------------------------------------------
To Top