PHP Conference Japan 2024

db2_fetch_row

(PECL ibm_db2 >= 1.0.0)

db2_fetch_row将结果集指针设置为下一行或请求的行

描述

db2_fetch_row(资源 $stmt, 整数 $row_number = -1): 布尔值

使用 db2_fetch_row() 迭代结果集,或者如果您请求了可滚动游标,则指向结果集中的特定行。

要从结果集中检索各个字段,请调用 db2_result() 函数。

大多数应用程序将调用 db2_fetch_assoc()db2_fetch_both()db2_fetch_array() 来推进结果集指针并返回完整的一行作为数组,而不是调用 db2_fetch_row()db2_result()

参数

stmt

有效的 stmt 资源。

row_number

使用可滚动游标,您可以在结果集中请求特定的行号。行编号从 1 开始。

返回值

如果请求的行存在于结果集中,则返回 true。如果请求的行不存在于结果集中,则返回 false

范例

示例 #1 迭代结果集

以下示例演示了如何使用 db2_fetch_row() 迭代结果集,并使用 db2_result() 从结果集中检索列。

<?php
$sql
= 'SELECT name, breed FROM animals WHERE weight < ?';
$stmt = db2_prepare($conn, $sql);
db2_execute($stmt, array(10));
while (
db2_fetch_row($stmt)) {
$name = db2_result($stmt, 0);
$breed = db2_result($stmt, 1);
print
"$name $breed";
}
?>

以上示例将输出

cat Pook
gold fish Bubbles
budgerigar Gizmo
goat Rickety Ride

示例 #2 i5/OS 建议使用的 db2_fetch_row/db2_result 替代方案

在 i5/OS 上,建议您使用 db2_fetch_both()db2_fetch_array()db2_fetch_object() 而不是 db2_fetch_row()/db2_result()。一般来说,db2_fetch_row()/db2_result() 在各种列类型的 EBCIDICASCII 转换中存在更多问题,包括 DBCS 应用程序中可能发生的截断。您可能还会发现 db2_fetch_both()db2_fetch_array()db2_fetch_object() 的性能优于 db2_fetch_row()/db2_result()

<?php
$conn
= db2_connect("","","");
$sql = 'SELECT SPECIFIC_SCHEMA, SPECIFIC_NAME, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_CREATED, ROUTINE_BODY, IN_PARMS, OUT_PARMS, INOUT_PARMS, PARAMETER_STYLE, EXTERNAL_NAME, EXTERNAL_LANGUAGE FROM QSYS2.SYSROUTINES FETCH FIRST 2 ROWS ONLY';
$stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
while (
$row = db2_fetch_both($stmt)){
echo
"<br>db2_fetch_both {$row['SPECIFIC_NAME']} {$row['ROUTINE_CREATED']} {$row[5]}";
}
$stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
while (
$row = db2_fetch_array($stmt)){
echo
"<br>db2_fetch_array {$row[1]} {$row[5]}";
}
$stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
while (
$row = db2_fetch_object($stmt)){
echo
"<br>db2_fetch_object {$row->SPECIFIC_NAME} {$row->ROUTINE_CREATED}";
}
db2_close($conn);
?>

以上示例将输出

db2_fetch_both MATCH_ANIMAL 2006-08-25-17.10.23.775000 2006-08-25-17.10.23.775000
db2_fetch_both MULTIRESULTS 2006-10-17-10.11.05.308000 2006-10-17-10.11.05.308000
db2_fetch_array MATCH_ANIMAL 2006-08-25-17.10.23.775000
db2_fetch_array MULTIRESULTS 2006-10-17-10.11.05.308000
db2_fetch_object MATCH_ANIMAL 2006-08-25-17.10.23.775000
db2_fetch_object MULTIRESULTS 2006-10-17-10.11.05.308000

参见

  • db2_fetch_array() - 返回一个数组,该数组按列位置索引,表示结果集中的某一行
  • db2_fetch_assoc() - 返回一个数组,该数组按列名称索引,表示结果集中的某一行
  • db2_fetch_both() - 返回一个数组,该数组按列名称和位置索引,表示结果集中的某一行
  • db2_fetch_object() - 返回一个对象,其属性表示已提取行中的列
  • db2_result() - 返回结果集中的某一行中的单个列

添加注释

用户贡献的注释 2 个注释

krisdover at hotmail dot com
17 年前
如果指定了第二个参数(行号),则您的连接需要将 CURSOR 选项设置为 DB2_SCROLLABLE。否则,对该函数的所有调用都将失败。在 ibm_db2 扩展模块内部,db2cli api 函数 SQLFetchScroll() 会生成错误“CLI0145E Fetch type out of range”,因为它需要一个可滚动的结果集才能工作,而不是默认的仅向前结果集。

希望这能为其他人节省跟踪 db2cli 跟踪中此问题所需的时间。

此致,
Kris Dover
andrey at php dot net
19 年前
如果第二个参数为 0 或 NULL(最终计算结果为 0),则内部指针将向前移动。< 0 值将返回警告。
To Top