2024年PHP开发者大会日本站

db2_next_result

(PECL ibm_db2 >= 1.0.0)

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

描述

db2_next_result(资源 $stmt): 资源|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
"获取第一个结果集\n";
while (
$row = db2_fetch_array($stmt)) {
var_dump($row);
}

print
"\n获取第二个结果集\n";
$res = db2_next_result($stmt);
if (
$res) {
while (
$row = db2_fetch_array($res)) {
var_dump($row);
}
}

print
"\n获取第三个结果集\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
16年前
一些不太明显但很重要的说明

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