PHP 8.5.0 Alpha 1 available for testing

db2_fetch_both

(PECL ibm_db2 >= 1.0.0)

db2_fetch_both Devuelve un array, indexado por nombre de columna y posición, que representa una fila del conjunto de resultados

Descripción

db2_fetch_both(resource $stmt, int $row_number = -1): array|false

Devuelve un array, indexado por nombre de columna y posición, que representa una fila del conjunto de resultados. Tenga en cuenta que la fila devuelta por db2_fetch_both() requiere más memoria que los arrays simplemente indexados devueltos por db2_fetch_assoc() o db2_fetch_array().

Parámetros

stmt

Un recurso stmt válido que contiene el conjunto de resultados.

row_number

Solicita una fila específica indexada numéricamente que comienza con el valor 1 en el conjunto de resultados. Al proporcionar este argumento, se generará una alerta PHP si el conjunto de resultados utiliza un cursor de avance solo.

Valores devueltos

Devuelve un array asociativo con los valores de las columnas indexados por el nombre de las columnas y el número de las columnas comenzando por 0. El array representa la siguiente fila o la fila solicitada del conjunto de resultados. Devuelve false si no hay una fila disponible en el conjunto de resultados o si la fila solicitada por row_number no existe en el conjunto de resultados.

Ejemplos

Ejemplo #1 Iteración con un cursor de avance solo

Si se llama a db2_fetch_both() sin el número de una fila específica, se recuperará automáticamente la siguiente fila del conjunto de resultados. El siguiente ejemplo accede a las columnas devueltas en el array mediante el método de nombres de columna y por índice numérico.

<?php

$sql
= "SELECT id, nom, race, poids FROM animaux ORDER BY race";
$stmt = db2_prepare($conn, $sql);
$result = db2_execute($stmt);

while (
$row = db2_fetch_both($stmt)) {
printf ("%-5d %-16s %-32s %10s\n",
$row['ID'], $row[0], $row['RACE'], $row[3]);
}
?>

El resultado del ejemplo sería:

0     Pook             chat                                   3.20
5     Rickety Ride     chèvre                                 9.70
2     Smarty           cheval                               350.00

Ejemplo #2 Recuperación de filas específicas con db2_fetch_both() a partir de un cursor flotante

Si su conjunto de resultados utiliza un cursor flotante, puede llamar a la función db2_fetch_assoc() con un número de fila específico. El siguiente ejemplo recupera cada fila par en el conjunto de resultados, comenzando con la segunda fila.

<?php

$sql
= "SELECT id, nom, race, poids FROM animaux ORDER BY race";
$result = db2_exec($stmt, $sql, array('cursor' => DB2_SCROLLABLE));

$i=2;
while (
$row = db2_fetch_both($result, $i)) {
printf ("%-5d %-16s %-32s %10s\n",
$row[0], $row['NOM'], $row[2], $row['POIDS']);
$i = $i + 2;
}
?>

El resultado del ejemplo sería:

0     Pook             chat                                   3.20
5     Rickety Ride     chèvre                                 9.70
2     Smarty           cheval                               350.00

Ver también

  • db2_fetch_array() - Devuelve un array, indexado por la posición de las columnas, que representa una línea del conjunto de resultados
  • db2_fetch_assoc() - Devuelve un array, indexado por nombre de columna, que representa una fila del conjunto de resultados
  • db2_fetch_object() - Devuelve un objeto con las propiedades que representan columnas en la fila extraída
  • db2_fetch_row() - Modifica el puntero del conjunto de resultados a la siguiente línea o a la línea solicitada
  • db2_result() - Devuelve un valor de una columna de una fila de un conjunto de resultados

add a note

User Contributed Notes 1 note

up
0
eacosta at openware dot biz
17 years ago
Hello,

Some weeks ago I faced difficulties with walk a big number of
records from a result set.

I was using the function db2_fetch_both in a method of a database adapter
class to retrieve just one record at a time. The total number of records
were: 5647 and when I reach record number 1600 the function crashed
generating the below message in "Actual result" field.

I am copying table's description next:

TMP_TABLE
-----------------------------------------------------------------
| ID | TYPE | SIZE | NULL |
-----------------------------------------------------------------
| ID | INTEGER | 4 | NO |
| SERVICE | VARCHAR | 30 | NO |
| ID_v | VARCHAR | 30 | NO |
| INFORMATION | CLOB | 65536 | YES |
| EXP_LEVEL | INTEGER | 4 | NO |
| IP4B | BIGINT | 8 | NO |
| MODIFIED | INTEGER | 4 | YES |
| DETAIL | VARCHAR | 200 | YES |
| FALSPOS | INTEGER | 4 | YES |
-----------------------------------------------------------------

When it crashed I received this message from db2_fetch_both

db2_fetch_array() [function.db2-fetch-array]: Fetch Failure

After reported this message to IBM OpenDev I was helped by a OpenDev IBMer who noticed me
that it wasn't a ibm_db2 module problem, in fact it was a database configuration
issue. The OpenDev IBMer looked into my DB2 Client CLI TRACE files and found out what was happen.
So I had to modify APP_CTL_HEAP_SZ and everything seems to works fine now.

--
Esteban Acosta Villafañe
Area I+D
http://www.openware.biz/opendev
Linkein Profile: http://www.linkedin.com/in/estebanav
To Top