ConFoo 2025

db2_fetch_row

(PECL ibm_db2 >= 1.0.0)

db2_fetch_row Establecer el apuntador de los resultados hacia la siguiente fila o a la fila solicitada

Descripción

db2_fetch_row(resource $stmt, int $row_number = ?): bool

db2_fetch_row() se utiliza para iterar a través de un bloque de resultados o para apuntar a una fila específica del resultado si se utiliza un cursor de recorrido.

Para extraer campos individuales del resultado hay que llamar a la función db2_result().

En lugar de llamar a db2_fetch_row() y db2_result(), la mayoría de las aplicaciones utilizan las funciones db2_fetch_assoc(), db2_fetch_both() o db2_fetch_array() para avanzar el apuntador del bloque de resultados y devolver una fila completa como arreglo.

Parámetros

stmt

Un recurso stmt válido.

row_number

Con cursores de recorrido, se puede solicitar un número de fila específica del bloque de resultados. Las filas se indexan a partir de uno.

Valores devueltos

Devuelve true si la fila solicitada existe dentro de los resultados. Devuelve false si la fila solicitada no existe entre los resultados.

Ejemplos

Ejemplo #1 Iterando a través de un bloque de resultados

El siguiente ejemplo demuestra como iterar a través de los resultados con db2_fetch_row() y extraer las columnas del resultado con db2_result().

<?php
$sql
= 'SELECT name, breed FROM animals WHERE weight < ?';
$stmt = db2_prepare($conn, $sql);
db2_execute($stmt, array(10));
while (
db2_fetch_row($stmt)) {
$name = db2_result($stmt, 0);
$breed = db2_result($stmt, 1);
print
"$name $breed";
}
?>

El resultado del ejemplo sería:

cat Pook
gold fish Bubbles
budgerigar Gizmo
goat Rickety Ride

Ejemplo #2 Alternativas recomendadas para db2_fetch_row/db2_result en i5/OS

En i5/OS se recomienda el uso de db2_fetch_both(), db2_fetch_array() o db2_fetch_object() en lugar de db2_fetch_row()/db2_result(). En general db2_fetch_row()/db2_result() tienen más problemas con la traducción de EBCIDIC a ASCII en algunos tipos de columnas, incluyendo posibles truncamientos en aplicaciones DBCS. Es posible que el rendimiento de db2_fetch_both(), db2_fetch_array() y db2_fetch_object() sea superior comparado con db2_fetch_row()/db2_result().

<?php
$conn
= db2_connect("","","");
$sql = 'SELECT SPECIFIC_SCHEMA, SPECIFIC_NAME, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_CREATED, ROUTINE_BODY, IN_PARMS, OUT_PARMS, INOUT_PARMS, PARAMETER_STYLE, EXTERNAL_NAME, EXTERNAL_LANGUAGE FROM QSYS2.SYSROUTINES FETCH FIRST 2 ROWS ONLY';
$stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
while (
$row = db2_fetch_both($stmt)){
echo
"<br>db2_fetch_both {$row['SPECIFIC_NAME']} {$row['ROUTINE_CREATED']} {$row[5]}";
}
$stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
while (
$row = db2_fetch_array($stmt)){
echo
"<br>db2_fetch_array {$row[1]} {$row[5]}";
}
$stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
while (
$row = db2_fetch_object($stmt)){
echo
"<br>db2_fetch_object {$row->SPECIFIC_NAME} {$row->ROUTINE_CREATED}";
}
db2_close($conn);
?>

El resultado del ejemplo sería:

db2_fetch_both MATCH_ANIMAL 2006-08-25-17.10.23.775000 2006-08-25-17.10.23.775000
db2_fetch_both MULTIRESULTS 2006-10-17-10.11.05.308000 2006-10-17-10.11.05.308000
db2_fetch_array MATCH_ANIMAL 2006-08-25-17.10.23.775000
db2_fetch_array MULTIRESULTS 2006-10-17-10.11.05.308000
db2_fetch_object MATCH_ANIMAL 2006-08-25-17.10.23.775000
db2_fetch_object MULTIRESULTS 2006-10-17-10.11.05.308000

Ver también

  • db2_fetch_array() - Devolver un arreglo, indexado por la posición de las columnas, que represanta una fila de un bloque de resultados
  • db2_fetch_assoc() - Devolver un arreglo, indexado por el nombre de las columnas, representando una fila del bloque de resultados
  • db2_fetch_both() - Devolver un arreglo, indexado por el nombre y por la posición de la columna, representando una fila de un bloque de resultados
  • db2_fetch_object() - Devolver un objeto con atributos que representan a las columnas de una fila extraida
  • db2_result() - Devolver una columna específica del resultado

add a note

User Contributed Notes 2 notes

up
1
krisdover at hotmail dot com
17 years ago
if the second parameter (the row number) is specified, your connection needs to have the CURSOR option set to DB2_SCROLLABLE. Otherwise all calls to this function will fail. Internal to the ibm_db2 extension module the db2cli api function SQLFetchScroll() generates the error "CLI0145E Fetch type out of range" since it requires a scrollable resultset to work, instead of the default forward only resultset.

hope this saves someone the time it took me to track this down in the db2cli traces.

Regards,
Kris Dover
up
1
andrey at php dot net
19 years ago
If the second parameter is 0 or NULL (which eventually evaluates to 0) then the internal pointer is moved forward. < 0 value will return an warning.
To Top