db2_next_result

(PECL ibm_db2 >= 1.0.0)

db2_next_result 请求存储过程的下一个结果集

描述

db2_next_result(resource $stmt): resource|false

存储过程可以返回零个或多个结果集。虽然您以与处理简单 SELECT 语句返回的结果完全相同的方式处理第一个结果集,但要从存储过程中获取第二个和后续结果集,您必须调用 db2_next_result() 函数并将结果返回给一个唯一命名的 PHP 变量。

参数

stmt

db2_exec()db2_execute() 返回的预处理语句。

返回值

如果存储过程返回了另一个结果集,则返回包含下一个结果集的新语句资源。如果存储过程没有返回另一个结果集,则返回 false

示例

示例 #1 调用返回多个结果集的存储过程

在以下示例中,我们调用一个返回三个结果集的存储过程。第一个结果集直接从我们调用 CALL 语句的同一语句资源中获取,而第二个和第三个结果集从我们对 db2_next_result() 函数调用的语句资源中获取。

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

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

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

print
"\nFetching second result set\n";
$res = db2_next_result($stmt);
if (
$res) {
while (
$row = db2_fetch_array($res)) {
var_dump($row);
}
}

print
"\nFetching third result set\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 条注释

0
matthewv at ca dot ibm dot com
15 年前
一些不太明显但重要的注意事项

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