PHP 8.3.4 Released!

db2_next_result

(PECL ibm_db2 >= 1.0.0)

db2_next_result Solicitar el siguiente resultado de un procedimiento almacendo

Descripción

db2_next_result(resource $stmt): resource

Un procedimiento almacenado puede o no devolver bloques de resultados. El primer resultado devuelto se maneja de la misma manera que se manejan los resultados devueltos por una sentencia SELECT normal, en cambio, para extraer el segundo y los siguientes bloques de un procedimiento almacenado se debe llamar a db2_next_result() y almacenar el resultado en una variable de PHP.

Parámetros

stmt

Una sentencia preparada devuelta por db2_exec() o db2_execute().

Valores devueltos

La función devuelve un nuevo recurso de sentencia que contiene el siguiente bloque de resultados si el procedimiento almacenado regresa otro bloque de resultados. La función devuelve false si el procedimiento almacenado no regresa otro resultado.

Ejemplos

Ejemplo #1 Llamando a un procedimiento almacenado que devuelve múltiples resultados

En el siguiente ejemplo, se llama a un procedimiento almacenado que devuelve tres bloques de resultados. El primer resultado se extrae directamente con el mismo recurso de sentencia que invoca a la instrucción CALL, el segundo y el tercer resultado se extraen con un recurso de sentencia devuelto por 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);
}
?>

El resultado del ejemplo sería:

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           "
}

add a note

User Contributed Notes 1 note

up
0
matthewv at ca dot ibm dot com
15 years ago
Some not so obvious but imported notes:

1) You must always use the original statement return when fetching the next result set.
2) You can not remove a reference to a previous result set if you wish to access another result set.

----------------WILL NOT WORK-------------------------
<?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);
}
}
?>
-----------------------------------------------------------------

----------------WILL NOT WORK-------------------------
<?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);
}
}
?>
-----------------------------------------------------------------

----------------WILL WORK--------------------------------
<?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