从 PHP 中的存储过程检索多个结果集 (ibm_db2)

当对存储过程的单个调用返回多个结果集时,您可以使用 ibm_db2 API 的 db2_next_result 函数来检索结果集。

准备工作

您必须具有由具有多个结果集的 db2_execdb2_execute 函数返回的语句资源。

过程

要检索多个结果集,请执行以下操作:

  1. 通过调用其中一个 ibm_db2 访存函数并将语句资源作为自变量传递,从过程返回的第一个结果集中访存行。 (该过程所返回的第一个结果集与语句资源相关联。)
    表 1。 ibm_db2 fetch 函数
    函数 描述
    db2_fetch_array 返回按列位置建立索引的数组,表示结果集中的行。 各个列从 0 开始建立索引。
    db2_fetch_assoc 返回按列名建立索引的数组,表示结果集中的行。
    db2_fetch_both 返回一个数组,按列名和位置建立索引,表示结果集中的行
    db2_fetch_row 将结果集指针设置到下一行或请求的行。 使用此函数可以对结果集进行迭代。
    db2_fetch_object 返回具有表示访存行中的列的属性的对象。 对象的属性映射到结果集中列的名称。
  2. 通过将原始语句资源作为第一个自变量传递至 db2_next_result 函数来检索后续结果集。 您可以从语句资源访存行,直到结果集中没有其他行为止。

    如果没有更多可用的结果集,或者如果过程未返回结果集,那么 db2_next_result 函数将返回 False。

    有关 ibm_db2 API 的更多信息,请参阅 http://www.php.net/docs.php

示例

从存储过程检索多个结果集。

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

print "Fetching first result set\n";
while ($row = db2_fetch_array($stmt)) {
    // work with row
}

print "\nFetching second result set\n";
$result_2 = db2_next_result($stmt);
if ($result_2) {
  while ($row = db2_fetch_array($result_2)) {
    // work with row
  }
}

print "\nFetching third result set\n";
$result_3 = db2_next_result($stmt);
if ($result_3) {
  while ($row = db2_fetch_array($result_3)) {
    // work with row
  }
}

下一步要执行的操作

准备好关闭与数据库的连接时,请调用 db2_close 函数。 如果尝试关闭使用 db2_pconnect创建的持久连接,那么关闭请求将返回 TRUE ,并且持久 IBM® 数据服务器客户机连接仍可供下一个调用者使用。