oci_fetch_all

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_fetch_allObtiene múltiples filas de una consulta y las ubica en un array bidimiensional

Descripción

oci_fetch_all(
    resource $statement,
    array &$output,
    int $skip = 0,
    int $maxrows = -1,
    int $flags = OCI_FETCHSTATEMENT_BY_COLUMN + OCI_ASSOC
): int

Obtiene múltiples filas de una consulta y las ubica en un array bidimiensional. Por omisión, se devuelven todas las filas.

Esta función puede ser llamada únicamente una vez por cada consulta ejecutada con oci_execute().

Parámetros

statement

Un identificador de sentencia de OCI8 válido creado por oci_parse() y ejecutado por oci_execute(), o un identificador de sentencia de REF CURSOR.

output

La variable que contiene las filas devueltas.

Las columnas LOB son devueltas como cadenas, donde Oracle admite la conversión.

Véase oci_fetch_array() para más información sobre cómo se obtienen los datos y los tipos.

skip

El número de filas iniciales a descartar cuando se obtiene el resultado. El valor predeterminado es 0, por lo que se devuelve la primera fila en adelante.

maxrows

El número de filas a devolver. El valor predeterminado es -1, lo que significa que se devuelven todas las filas desde skip + 1 en adelante.

flags

El parámetro flags indica la estructura del array y si se deberían usar arrays asociativos.

Modos de estructura del array de oci_fetch_all()
Constante Descripción
OCI_FETCHSTATEMENT_BY_ROW El array externo contendrá un subarray por cada fila de la consulta.
OCI_FETCHSTATEMENT_BY_COLUMN El array externo contendrá un subarray por cada columna de la consulta. Esto es lo predeterminado.

Los arrays se pueden indexar por encabezado de columna o numéricamente. Solamente será devuelto un modo de indexación.

Modos de indexación del array de oci_fetch_all()
Constante Descripción
OCI_NUM Se utilizan índices numéricos por cada array de columna.
OCI_ASSOC Se utilizan índices asociativos por cada array de columna. Esto es lo predeterminado.

Utilice el operador de adición "+" para elegir una combinación de modos de estructura e índice del array.

Los nombres de columna predeterminados de Oracle insensibles al uso de mayúsculas/minúsculas tendrán claves de array en mayúsculas. Los nombres de columnas sensibles al uso de mayúsculs/minúsculas tendrán claves de array que usan el nombre exacto de la columna. Use var_dump() en output para verificar el uso apropiado de mayúsculas/minúsculas en cada consulta.

Las consultas que tienen más de una columna con el mismo nombre deberían usar un alias de columna. Si no, aparecerá únicamente una de las columnas en el array asociativo.

Valores devueltos

Devuelve el número de filas de output, el cual podría ser cero o más, o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de oci_fetch_all()

<?php

$conn
= oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res);

echo
"$nrows filas obtenidas<br>\n";
var_dump($res);

// la salida de var_dump es:
// 2 filas obtenidas
// array(2) {
// ["POSTAL_CODE"]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(6) "10934x"
// }
// ["CITY"]=>
// array(2) {
// [0]=>
// string(4) "Roma"
// [1]=>
// string(6) "Venice"
// }
// }

// Imprimir los resultados de forma legible
echo "<table border='1'>\n";
foreach (
$res as $col) {
echo
"<tr>\n";
foreach (
$col as $item) {
echo
" <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "")."</td>\n";
}
echo
"</tr>\n";
}
echo
"</table>\n";

oci_free_statement($stid);
oci_close($conn);

?>

Ejemplo #2 Ejemplo de oci_fetch_all() con OCI_FETCHSTATEMENT_BY_ROW

<?php

$conn
= oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW);

echo
"$nrows filas obtenidas<br>\n";
var_dump($res);

// La salida es:
// 2 filas obtenidas
// array(2) {
// [0]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "00989x"
// ["CITY"]=>
// string(4) "Roma"
// }
// [1]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "10934x"
// ["CITY"]=>
// string(6) "Venice"
// }
// }

oci_free_statement($stid);
oci_close($conn);

?>

Ejemplo #3 oci_fetch_all() con OCI_NUM

<?php

$conn
= oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_NUM);

echo
"$nrows filas obtenidas<br>\n";
var_dump($res);

// La salida es:
// 2 filas obtenidas
// array(2) {
// [0]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(4) "Roma"
// }
// [1]=>
// array(2) {
// [0]=>
// string(6) "10934x"
// [1]=>
// string(6) "Venice"
// }
// }

oci_free_statement($stid);
oci_close($conn);

?>

Notas

Nota:

Usar skip es muy ineficiente. Todas las filas que van a omitirse están incluidas en el conjunto de resultados que es devuelto desde la base de datos a PHP. Luego son excluidas. Es más eficiente usar SQL para restringir el índice y el rango de filas de las consultas. Véase oci_fetch_array() para un ejemplo.

Nota:

Las consultas que devuelven un número grande de filas pueden usar la memoria de forma más eficiente si se utiliza una función que obtiene una sola fila, como oci_fetch_array().

Nota:

Para consultas que devuelven un gran número de filas, se puede mejorar el rendimiento significativamente incrementando oci8.default_prefetch o utilizando oci_set_prefetch().

Nota:

No se devolverán filas desde Conjuntos de Resultados Implícitos de Oracle Database 12c. Use oci_fetch_array() en su lugar.

Ver también

  • oci_fetch() - Coloca la siguiente fila de una consulta en los búferes internos
  • oci_fetch_array() - Devuelve la siguiente fila de una consulta como un array asociativo o numérico
  • oci_fetch_assoc() - Devuelve la siguiente fila de una consulta como un array asociativo
  • oci_fetch_object() - Devuelve la siguiente fila de una consulta como un objeto
  • oci_fetch_row() - Devuelve la siguiente fila de una consulta como un array numérico
  • oci_set_prefetch() - Establece el número de filas a precargar mediante consultas

add a note add a note

User Contributed Notes 2 notes

up
0
eustaquiorangel at gmail dot com
10 years ago
Beware that only numerically indexed results will be returned if
OCI_NUM is used.
up
0
david at boeke dot com
21 years ago
The Skip and MaxRows parameters were not added until version 4.2.1.
Previous versions of php used this syntax:

           int ocifetchstatement ( resource stmt, array &output)

The function also took a third parameter that was not documented.  ( I assume that it was a flag)
To Top