PHP Conference Japan 2024

db2_fetch_both

(PECL ibm_db2 >= 1.0.0)

db2_fetch_both返回一个数组,该数组以列名和列位置进行索引,表示结果集中的一行

说明

db2_fetch_both(resource $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 条注释

up
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 客户端 CLI 跟踪文件,发现了问题所在。
所以我不得不修改 APP_CTL_HEAP_SZ,现在一切似乎都正常了。

--
埃斯特班·阿科斯塔·比利亚法涅
研发部门
http://www.openware.biz/opendev
领英档案:http://www.linkedin.com/in/estebanav
To Top