Documentación offline PHP master

oci_fetch_array

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

En esta página

oci_fetch_array

Lee una línea de un resultado en forma de array asociativo o numérico

Descripción#

oci_fetch_array(resource $statement, [int $mode]): array
```php

Devuelve un array que contiene la siguiente línea de una consulta. Cada entrada de este array corresponde a una columna de la línea. Esta función se utiliza típicamente en un ciclo que devuelve `false` cuando ya no hay más líneas disponibles.

Si el parámetro `statement` corresponde a un bloque PL/SQL devuelto por juegos de resultados implícitos de Oracle Database, entonces las líneas de todos los juegos de resultados serán recuperadas consecutivamente. Si `statement` es devuelto por la función `oci_get_implicit_resultset`, entonces solo el subconjunto de líneas de una sola consulta hija será devuelto.

Para más detalles sobre el mapeo de tipos de datos realizado por la extensión OCI8, lea los [tipos de datos soportados por el driver](#oci8.datatypes).

## Parámetros

`statement`  
Un identificador de consulta OCI8 creado por la función `oci_parse` y ejecutado por la función `oci_execute`, o un identificador de consulta `REF CURSOR`.

Puede ser también un identificador de consulta devuelto por la función `oci_get_implicit_resultset`.

`mode`  
El parámetro opcional `mode` puede ser la combinación de las siguientes constantes:

| Constante | Descripción |
|----|----|
| `OCI_BOTH` | Devuelve un array, indexado numéricamente y con los nombres de columnas. Idéntico a `OCI_ASSOC` + `OCI_NUM`). Este es el comportamiento por defecto. |
| `OCI_ASSOC` | Devuelve un array asociativo. |
| `OCI_NUM` | Devuelve un array indexado numéricamente. |
| `OCI_RETURN_NULLS` | Crea elementos vacíos para los valores `null`. El valor de los elementos será el valor `null` de PHP. |
| `OCI_RETURN_LOBS` | Devuelve el contenido del LOB en lugar de su descriptor. |

Modos para `oci_fetch_array`

El `mode` por defecto es `OCI_BOTH`.

Utilice el operador de adición ""+"" para especificar más de un modo a la vez.

## Valores devueltos

Devuelve un array con índices numéricos o asociativos. Si ya no hay más líneas disponibles para la consulta `statement` entonces `false` será devuelto.

Por defecto, las columnas `LOB` son devueltas en forma de descriptores LOB.

Las columnas `DATE` son devueltas en forma de una cadena con el formato de fecha actual. El formato por defecto puede ser modificado mediante las variables de entorno de Oracle, como `NLS_LANG` o mediante la ejecución del comando `ALTER SESSION SET NLS_DATE_FORMAT`.

Los nombres de columnas que no son sensibles a mayúsculas/minúsculas (por defecto en Oracle), tendrán nombres de atributos en mayúsculas. Los nombres de columnas que son sensibles a mayúsculas/minúsculas, tendrán nombres de atributos utilizando exactamente la misma mayúscula/minúscula de la columna. Utilice la función `var_dump` sobre el objeto de resultado para verificar la mayúscula/minúscula apropiada a utilizar para cada consulta.

El nombre de la tabla no está incluido en el índice del array. Si su consulta contiene dos columnas diferentes con el mismo nombre, utilice la constante `OCI_NUM` o añada un alias a la columna en la consulta para asegurar la unicidad del nombre; ver el ejemplo \#7. De lo contrario, solo una columna será devuelta mediante PHP.

## Ejemplos

Ejemplo con `oci_fetch_array` con `OCI_BOTH`
\n"; echo $row[1] . " and " . $row['DEPARTMENT_NAME'] . " son los mismos
\n"; } oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` con `OCI_NUM`
\n"; echo $row[1]->read(11) . "
\n"; // esto mostrará los 11 primeros bytes desde DESCRIPTION } // Muestra: // 1 // A very long oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` con `OCI_ASSOC`
\n"; echo $row['DESCRIPTION']->read(11) . "
\n"; // esto mostrará los 11 primeros bytes desde DESCRIPTION } // Muestra: // 1 // A very long oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` con `OCI_RETURN_NULLS`
string(1) "1" } */ $stid = oci_parse($conn, 'SELECT 1, null FROM dual'); oci_execute($stid); while (($row = oci_fetch_array ($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { // Recupera NULLs var_dump($row); } /* El código anterior muestra: array(2) { [1]=> string(1) "1" ["NULL"]=> NULL } */ ?>
`oci_fetch_array` con `OCI_RETURN_LOBS`
\n"; echo $row['DESCRIPTION'] . "
\n"; // contiene todo el contenido de DESCRIPTION // En un ciclo, liberar la variable antes de recuperar una segunda // línea permite reducir el uso de memoria de PHP unset($row); } // Muestra: // 1 // A very long string oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` con nombres de columnas sensibles a mayúsculas/minúsculas
\n"; // muestra Chris print $row['CITY'] . "
\n"; // muestra Melbourne oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` con columnas que poseen nombres duplicados
// string(9) "Australia" // } // Para consultar un nombre de columna duplicado, utilice un alias de columna SQL // como "AS ctnm": $sql = 'SELECT mycity.name AS ctnm, mycountry.name FROM mycity, mycountry WHERE mycity.id = mycountry.id'; $stid = oci_parse($conn, $sql); oci_execute($stid); $row = oci_fetch_array($stid, OCI_ASSOC); var_dump($row); // La salida contiene ahora 2 columnas: // array(2) { // ["CTNM"]=> // string(9) "Melbourne" // ["NAME"]=> // string(9) "Australia" // } oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` y columnas `DATE`
\n"; // Muestra 1997-06-14 oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` y `REF CURSOR`
\n"; while (($row = oci_fetch_array($refcur, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { echo "\n"; foreach ($row as $item) { echo " ".($item !== null ? htmlentities($item, ENT_QUOTES) : "")."\n"; } echo "\n"; } echo "\n"; oci_free_statement($refcur); oci_free_statement($stid); oci_close($conn); ?>
Paginación con `oci_fetch_array` utilizando una consulta que utiliza el parámetro `LIMIT`
= 12) { // Utilización de la sintaxis Oracle 12c OFFSET / FETCH NEXT $sql = $sql . ' OFFSET :offset ROWS FETCH NEXT :numrows ROWS ONLY'; } else { // Las versiones antiguas de Oracle requieren una consulta anidada // para seleccionar un subconjunto desde $sql. O, si la consulta SQL // es conocida en el momento del desarrollo, utilice una función // row_number() en lugar de esta solución de anidación. En los // entornos de producción, asegúrese de evitar las inyecciones // SQL con la concatenación. $sql = "SELECT * FROM (SELECT a.*, ROWNUM AS my_rnum FROM ($sql) a WHERE ROWNUM <= :offset + :numrows) WHERE my_rnum > :offset"; } $offset = 0; // No procesar las primeras líneas $numrows = 5; // Devuelve 5 líneas $stid = oci_parse($conn, $sql); oci_bind_by_name($stid, ':numrows', $numrows); oci_bind_by_name($stid, ':offset', $offset); oci_execute($stid); while (($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) != false) { echo $row['CITY'] . " " . $row['POSTAL_CODE'] . "
\n"; } // Muestra: // Beijing 190518 // Bern 3095 // Bombay 490231 // Geneva 1730 // Hiroshima 6823 oci_free_statement($stid); oci_close($conn); ?>
Ejemplo con `oci_fetch_array` con Oracle Database
\n"; while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { echo "\n"; foreach ($row as $item) { echo " ".($item!==null?htmlentities($item, ENT_QUOTES|ENT_SUBSTITUTE):"")."\n"; } echo "\n"; } echo "\n"; // Muestra: // Beijing 190518 // Bern 3095 // Bombay 490231 // CN // CH // IN oci_free_statement($stid); oci_close($conn); ?>

```php

Notas#

[!NOTE] Los índices de los arrays asociativos deben estar en mayúsculas para las columnas estándar de Oracle que han sido creadas con nombres sensibles a mayúsculas/minúsculas.

[!NOTE] Para las consultas que devuelven un número muy grande de líneas, el rendimiento puede ser muy significativamente mejorado aumentando el valor de la opción oci8.default_prefetch o usando la función oci_set_prefetch.

[!NOTE] La función oci_fetch_array es significativamente más lenta que la función oci_fetch_assoc o oci_fetch_row, pero es más flexible.

Véase también#

oci_fetch, oci_fetch_all, oci_fetch_assoc, oci_fetch_object, oci_fetch_row, oci_set_prefetch