oci_define_by_name
(PHP 5, PECL OCI8 >= 1.1.0)
oci_define_by_name — Associe une variable PHP avec une colonne pour une requête de récupération de données
Description
$statement
, string $column_name
, mixed &$variable
[, int $type
= SQLT_CHR
] )Associe une variable PHP avec une colonne pour une requête de récupération de données utilisant la fonction oci_fetch().
L'appel à la fonction oci_define_by_name() doit s'effectuer avant l'exécution de 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.
-
column_name
-
Le nom de la colonne utilisé dans la requête.
Utilisez un nom en majuscule, pour les noms de colonne non sensibles à la casse (par défaut sous Oracle). Utilisez la casse exacte du nom de la colonne pour les noms de colonne sensibles à la casse.
-
variable
-
La variable PHP qui contiendra la valeur retournée par la colonne.
-
type
-
Le type de données à retourner. En général, ce paramètre n'est pas nécessaire. Notez que le style Oracle de conversion de données n'est pas appliqué ici. Par exemple, SQLT_INT sera ignoré et le type de données retourné sera SQLT_CHR.
Vous pouvez utiliser, optionnellement, la fonction oci_new_descriptor() pour allouer des descripteurs LOB/ROWID/BFILE.
Valeurs de retour
Cette fonction retourne TRUE
en cas de
succès ou FALSE
si une erreur survient.
Exemples
Exemple #1 Exemple avec oci_define_by_name()
<?php $conn = oci_connect('hr', 'welcome', 'localhost/XE'); if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $sql = 'SELECT location_id, city FROM locations WHERE location_id < 1200'; $stid = oci_parse($conn, $sql); // Les définitions DOIVENT être faîtes avant l'exécution de la requête oci_define_by_name($stid, 'LOCATION_ID', $locid); oci_define_by_name($stid, 'CITY', $city); oci_execute($stid); // Chaque récupération peuple les variables précédemment définies avec les données de la prochaine ligne while (oci_fetch($stid)) { echo "Location id $locid is $city<br>\n"; } // Affiche : // Location id 1000 is Roma // Location id 1100 is Venice oci_free_statement($stid); oci_close($conn); ?>
Exemple #2 Exemple avec oci_define_by_name() et des noms de colonne sensibles à la casse
<?php /* Avant exécution, créez la table suivant avec un nom de colonne sensible à la casse : CREATE TABLE mytab (id NUMBER, "MyDescription" VARCHAR2(30)); INSERT INTO mytab (id, "MyDescription") values (1, 'Iced Coffee'); COMMIT; */ $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 * FROM mytab'); // Utilisez des majuscules pour les noms de colonne insensibles à la casse oci_define_by_name($stid, 'ID', $id); // Utilisez la casse exacte pour les noms de colonnes sensibles à la casse oci_define_by_name($stid, 'MyDescription', $mydesc); oci_execute($stid); while (oci_fetch($stid)) { echo "id $id is $mydesc<br>\n"; } // Affiche : // id 1 is Iced Coffee oci_free_statement($stid); oci_close($conn); ?>
Exemple #3 Exemple avec oci_define_by_name() et des colonnes de type LOB
<?php /* Avant exécution, créez la table suivante : CREATE TABLE mytab (id NUMBER, fruit CLOB); INSERT INTO mytab (id, fruit) values (1, 'apple'); INSERT INTO mytab (id, fruit) values (2, 'orange'); COMMIT; */ $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 * FROM mytab'); // Les définitions DOIVENT être effectuées avant l'exécution oci_define_by_name($stid, 'ID', $id); oci_define_by_name($stid, 'FRUIT', $fruit); // $fruit will become a LOB descriptor oci_execute($stid); while (oci_fetch($stid)) { echo $id . " is " . $fruit->load(100) . "<br>\n"; } // Affiche : // 1 is apple // 2 is orange $fruit->free(); oci_free_statement($stid); oci_close($conn); ?>
Exemple #4 Exemple avec oci_define_by_name() et un type explicite
<?php /* Avant exécution, créez la table suivante : CREATE TABLE mytab (id NUMBER, fruit CLOB); INSERT INTO mytab (id, fruit) values (1, 'apple'); INSERT INTO mytab (id, fruit) values (2, 'orange'); COMMIT; */ $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 * FROM mytab'); // Les définitions DOIVENT être faîtes avant exécution oci_define_by_name($stid, 'ID', $id); $fruit = oci_new_descriptor($conn, OCI_D_LOB); oci_define_by_name($stid, 'FRUIT', $fruit, OCI_D_CLOB); oci_execute($stid); while (oci_fetch($stid)) { echo $id . " is " . $fruit->load(100) . "<br>\n"; } // Affiche : // 1 is apple // 2 is orange $fruit->free(); oci_free_statement($stid); oci_close($conn); ?>
Notes
Note:
Dans les versions de PHP antérieures à la version 5.0.0, vous devez utiliser la fonction ocidefinebyname(). 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_new_descriptor() - Initialise un nouveau pointeur vide de LOB/FILE Oracle