PHP Conference Japan 2024

db2_fetch_both

(PECL ibm_db2 >= 1.0.0)

db2_fetch_both 傳回一個陣列,其索引同時使用欄位名稱和位置,代表結果集中的一列

描述

db2_fetch_both(資源 $stmt, int $row_number = -1): array|false

傳回一個陣列,其索引同時使用欄位名稱和位置,代表結果集中的一列。請注意,db2_fetch_both() 傳回的列比 db2_fetch_assoc()db2_fetch_array() 傳回的單索引陣列需要更多記憶體。

參數

stmt

一個包含結果集的有效 stmt 資源。

row_number

從結果集中請求特定的 1 索引列。如果結果集使用僅向前游標,則傳遞此參數會導致 PHP 警告。

傳回值

傳回一個關聯陣列,其欄位值索引同時使用欄位名稱和 0 索引的欄位編號。陣列代表結果集中的下一列或請求的列。如果結果集中沒有列剩餘,或者結果集中不存在 row_number 請求的列,則傳回 false

範例

範例 #1 迭代僅向前游標

如果您在沒有指定列號的情況下呼叫 db2_fetch_both(),它會自動擷取結果集中的下一列。以下範例會同時使用欄位名稱和數字索引來存取傳回陣列中的欄位。

<?php

$sql
= "SELECT id, name, breed, weight FROM animals ORDER BY breed";
$stmt = db2_prepare($conn, $sql);
$result = db2_execute($stmt);

while (
$row = db2_fetch_both($stmt)) {
printf ("%-5d %-16s %-32s %10s\n",
$row['ID'], $row[0], $row['BREED'], $row[3]);
}
?>

上面的範例將會輸出

0     Pook             cat                                    3.20
5     Rickety Ride     goat                                   9.70
2     Smarty           horse                                350.00

範例 #2 使用 db2_fetch_both() 從可捲動游標擷取特定列

如果您的結果集使用可捲動游標,您可以呼叫具有特定列號的 db2_fetch_both()。以下範例擷取結果集中每隔一列,從第二列開始。

<?php

$sql
= "SELECT id, name, breed, weight FROM animals ORDER BY breed";
$result = db2_exec($stmt, $sql, array('cursor' => DB2_SCROLLABLE));

$i=2;
while (
$row = db2_fetch_both($result, $i)) {
printf ("%-5d %-16s %-32s %10s\n",
$row[0], $row['NAME'], $row[2], $row['WEIGHT']);
$i = $i + 2;
}
?>

上面的範例將會輸出

0     Pook             cat                                    3.20
5     Rickety Ride     goat                                   9.70
2     Smarty           horse                                350.00

參見

  • db2_fetch_array() - 傳回一個陣列,其索引使用欄位位置,代表結果集中的一列
  • db2_fetch_assoc() - 傳回一個陣列,其索引使用欄位名稱,代表結果集中的一列
  • db2_fetch_object() - 傳回一個物件,其屬性代表擷取列中的欄位
  • db2_fetch_row() - 將結果集指標設定為下一列或請求的列
  • db2_result() - 從結果集中的一列傳回單一欄位

新增註解

使用者貢獻的註解 1 則註解

0
eacosta at openware dot biz
16 年前
您好,

幾週前,我在處理從結果集取得大量
紀錄時遇到困難。

我當時在資料庫介面卡的某個方法中使用 db2_fetch_both 函式
類別,一次只擷取一筆記錄。記錄總數
為:5647,當我達到記錄編號 1600 時,函式崩潰了,
在「實際結果」欄位中產生以下訊息。

我接下來複製表格的描述

TMP_TABLE
-----------------------------------------------------------------
| ID | TYPE | SIZE | NULL |
-----------------------------------------------------------------
| ID | INTEGER | 4 | NO |
| SERVICE | VARCHAR | 30 | NO |
| ID_v | VARCHAR | 30 | NO |
| INFORMATION | CLOB | 65536 | YES |
| EXP_LEVEL | INTEGER | 4 | NO |
| IP4B | BIGINT | 8 | NO |
| MODIFIED | INTEGER | 4 | YES |
| DETAIL | VARCHAR | 200 | YES |
| FALSPOS | INTEGER | 4 | YES |
-----------------------------------------------------------------

當它崩潰時,我從 db2_fetch_both 收到此訊息

db2_fetch_array() [function.db2-fetch-array]:擷取失敗

在向 IBM OpenDev 回報這個訊息後,我得到一位 OpenDev IBM 成員的協助,他注意到
這不是 ibm_db2 模組的問題,實際上是資料庫組態
的問題。這位 OpenDev IBM 成員查看了我的 DB2 Client CLI TRACE 檔案,並找出問題所在。
所以我必須修改 APP_CTL_HEAP_SZ,現在一切似乎都正常運作了。

--
Esteban Acosta Villafañe
研發部門
http://www.openware.biz/opendev
Linkein 個人檔案:http://www.linkedin.com/in/estebanav
To Top