oci_execute
oci_fetch_array
Fonctions OCI8
PHP Manual

# oci_fetch_all

(PHP 5, PECL OCI8 >= 1.1.0)

oci_fetch_all — Lit plusieurs lignes d'un résultat dans un tableau multi-dimensionnel

### Description

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

Lit toutes les lignes d'un résultat Oracle dans un tableau à 2 dimensions. Par défaut, toutes les lignes sont retournées.

Cette fonction peut être appelée une seule fois pour chaque requête exécutée via la fonction oci_execute().

### Liste de paramètres

`statement`

  Un identifiant de requête OCI8 créé par la fonction oci_parse() et exécuté par la fonction oci_execute(), ou un identifiant de requête REF CURSOR.

`output`

  La variable qui va contenir les lignes retournées.

  Les colonnes LOB sont retournées sous la forme d'une chaîne lorsqu'Oracle supporte la conversion.

  Voir la fonction oci_fetch_array() pour plus d'informations sur la façon dont les données et leurs types sont récupérés.

`skip`

  Nombre de lignes initiales à ignorer lors de la lecture du résultat. Par défaut, ce paramètre vaut 0, pour commencer la lecture à la première ligne.

`maxrows`

  Nombre de lignes maximal à retourner. Par défaut, vaut -1, ce qui signifie que toutes les lignes disponibles seront retournées depuis le paramètre `skip` + 1.

`flags`

  Le paramètre `flags` indique la structure du tableau mais aussi si des tableaux associatifs doivent être utilisés.

  Modes de structure des tableaux pour la fonction oci_fetch_all()
  Constante | Description
  --- | ---
  `OCI_FETCHSTATEMENT_BY_ROW` | Le tableau retourné contiendra un seul sous tableau par lignes.
  `OCI_FETCHSTATEMENT_BY_COLUMN` | Le tableau retourné contiendra un seul sous tableau par colonnes. C'est le comportement par défaut.

  Les tableaux peuvent être indexés par l'en-tête de colonne ou numériquement.

  Modes d'index des tableaux pour la fonction oci_fetch_all()
  Constante | Description
  --- | ---
  `OCI_NUM` | Des indexes numériques sont utilisés pour chaque tableau de colonnes.
  `OCI_ASSOC` | Des indexes associatifs sont utilisés pour chaque tableau de colonnes. C'est le comportement par défaut.

  Utilisez l'opérateur d'addition "+" pour choisir une combinaison de structures de tableaux et de modes d'index.

  Les noms de colonnes qui ne sont pas sensibles à la casse (par défaut sous Oracle), auront des noms d'attributs en majuscule. Les noms de colonnes qui sont sensibles à la casse, auront des noms d'attributs utilisant exactement la même casse de la colonne. Utilisez la fonction var_dump() sur l'objet de résultat pour vérifier la casse appropriée à utiliser pour chaque requête.

  Les requêtes qui possèdent plus d'une colonne dont le nom est identique doivent utiliser des alias. Sinon, seulement une des colonnes apparaîtra dans le tableau associatif.

### Valeurs de retour

Retourne le nombre de lignes récupérées dans le paramètre `output` qui peut être de 0 ou plus, ou `FALSE` si une erreur survient.

### Exemples

Exemple #1 Exemple avec 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 rows fetched<br>\n";
var_dump($res);
// var_dump affichera :
// 2 rows fetched
// 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"
// }
// }
// Affichage des résultats
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);
?>`

Exemple #2 Exemple avec oci_fetch_all() et `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 lignes récupérées<br>\n";
var_dump($res);
// Affiche :
// 2 lignes récupérées
// 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);
?>`

Exemple #3 Exemple avec oci_fetch_all() et `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 lignes récupérées<br>\n";
var_dump($res);
// Affiche :
// 2 lignes récupérées
// 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);
?>`

### Notes

> Note: L'utilisation du paramètre `skip` est vraiment inefficace. Toutes les lignes à éviter sont comprises dans le jeu de résultats retourné par la base de données à PHP. Puis, elles sont écartées. Il est plus efficace d'utiliser une requête SQL pour restreindre le champ des lignes désirées. Voir la fonction oci_fetch_array() pour un exemple concrêt.

> Note: Les requêtes qui retournent un très grand nombre de lignes peuvent gagner en économie de mémoire lors de l'utilisation de fonctions récupérant une seule ligne, comme le fait la fonction oci_fetch_array().

> Note: Pour les requêtes retournant un très grand nombre de lignes, les performances peuvent être très grandement accrues en augmentant la valeur de l'option oci8.default_prefetch ou en utilisant la fonction oci_set_prefetch().

> Note: En PHP 5.0.0 et antérieure, vous devez utiliser la fonction ocifetchstatement() à la place. Le nom de l'ancienne fonction peut toujours être utilisé dans les versions courantes, malgré le fait qu'il est maintenant obsolète et que nous ne vous le recommandons pas.

### Voir aussi

- oci_fetch() - Lit la prochaine ligne d'un résultat Oracle dans un buffer interne
- oci_fetch_array() - Lit une ligne d'un résultat sous forme de tableau associatif ou numérique
- oci_fetch_assoc() - Lit une ligne d'un résultat sous forme de tableau associatif
- oci_fetch_object() - Lit une ligne d'un résultat sous forme d'objet
- oci_fetch_row() - Lit la prochaine ligne d'une requête sous forme de tableau numérique
- oci_set_prefetch() - Indique le nombre de lignes qui doivent être lues à l'avance par Oracle

oci_execute
oci_fetch_array
Fonctions OCI8
PHP Manual