(PHP 5, PECL OCI8 >= 1.1.0)
oci_fetch_all — Obtiene múltiples filas de una consulta y las ubica en un array bidimiensional
$statement
, array &$output
[, int $skip
= 0
[, int $maxrows
= -1
[, int $flags
= OCI_FETCHSTATEMENT_BY_COLUMN
+ OCI_ASSOC
]]] )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().
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.
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.
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.
Devuelve el número de filas de output
, el cual
podría ser cero o más, o FALSE
en caso de error.
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);
?>
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:
En versiones de PHP anteriores a la 5.0.0, se debe usar ocifetchstatement() en su lugar. El nombre antiguo de la función todavía puede ser utilizado en versiones actuales, sin embargo es obsoleto y no se recomienda.