db2_next_result

(PECL ibm_db2 >= 1.0.0)

db2_next_result Solicita o próximo conjunto de resultados de um procedimento armazenado

Descrição

db2_next_result(resource $stmt): resource|false

Um procedimento armazenado pode retornar zero ou mais conjuntos de resultados. Enquanto se manipula o primeiro conjunto de resultados exatamente da mesma forma que seriam manipulado os resultados retornados por uma instrução SELECT simples, para buscar o segundo conjunto de resultados e os subsequentes de um procedimento armazenado, deve-se chamar a função db2_next_result() e retornar o resultado para uma variável PHP com nome exclusivo.

Parâmetros

stmt

Uma instrução preparada retornada de db2_exec() ou db2_execute().

Valor Retornado

Retorna um novo recurso de instrução contendo o próximo conjunto de resultados se o procedimento armazenado retornou outro conjunto de resultados. Retorna false se o procedimento armazenado não retornou outro conjunto de resultados.

Exemplos

Exemplo #1 Chamando um procedimento armazenado que retorna vários conjuntos de resultados

No exemplo a seguir, é chamado um procedimento armazenado que retorna três conjuntos de resultados. O primeiro conjunto de resultados é buscado diretamente do mesmo recurso de instrução no qual a instrução CALL é invocada, enquanto o segundo e o terceiro conjuntos de resultados são buscados de recursos de instrução retornados de nossas chamadas para a função db2_next_result().

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

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

print
"Buscando o primeiro conjunto de resultados\n";
while (
$row = db2_fetch_array($stmt)) {
var_dump($row);
}

print
"\nBuscando o segundo conjunto de resultados\n";
$res = db2_next_result($stmt);
if (
$res) {
while (
$row = db2_fetch_array($res)) {
var_dump($row);
}
}

print
"\nBuscando o terceiro conjunto de resultados\n";
$res2 = db2_next_result($stmt);
if (
$res2) {
while (
$row = db2_fetch_array($res2)) {
var_dump($row);
}
}

db2_close($conn);
}
?>

O exemplo acima produzirá:

Buscando o primeiro conjunto de resultados
array(2) {
  [0]=>
  string(16) "Bubbles         "
  [1]=>
  int(3)
}
array(2) {
  [0]=>
  string(16) "Gizmo           "
  [1]=>
  int(4)
}

Buscando o segundo conjunto de resultados
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"
}

Buscando o terceiro conjunto de resultados
array(1) {
  [0]=>
  string(16) "Bubbles         "
}
array(1) {
  [0]=>
  string(16) "Gizmo           "
}

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
0
matthewv at ca dot ibm dot com
16 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