oci_fetch_all
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_fetch_all — Lit plusieurs lignes d'un résultat dans un tableau multi-dimensionnel
Description
$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 soit par l'en-tête de colonne, soit 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:
Cette fonction ne retournera pas de lignes depuis un jeu de résultats implicite d'une base de données Oracle 12c. Utilisez pluotôt la fonction oci_fetch_array().
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
Version en cache
23/12/2024 03:13:25 Cette version de la page est en cache (à la date du 23/12/2024 03:13:25) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-function.oci-fetch-all.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.