![]()
|
||||||||||||||||||||||||
|
dernière mise à jour le
27/08/2006 |
Connexion à une base de données OracleIntroductionCe qui suit permet de se connecter et d'effectuer des requêtes PL/SQL (le SQL d'Oracle) sur des serveurs Oracle 7 et 8i. Les fonctions permettant la connexion à une base Oracle depuis PHP ont été écrites avec la librairie OCI8 (Oracle8 Call-Interface) d'Oracle. C'est pourquoi toutes ces fonctions commencent par "OCI". Connexion au serveurLa connexion à un serveur Oracle se fait avec la fonction OCILogOn : $connexion = OCILogOn("utilisateur", "mot_de_passe", $bdd);Cette ligne de commande va permettre de se connecter au schéma Oracle $bdd. $bdd est une chaîne de connexion définie dans le fichier tnsnames.ora. Par exemple, $bdd vaudra "MA_BDD" si tnsnames.ora contient une séquence comme celle-ci : Exécuter une requête PL/SQLCela se passe en deux étapes : la préparation de la requête, et l'exécution de la requéte proprement dite. La préparation s'effectue avec la fonction OCIParse : $stmt = OCIParse($connexion, "SELECT * FROM table");OCIParse utilise deux arguments : un identifiant de connexion (résultat de la fonction OCILogOn) et la requête. Le résultat de cette opération sera utilisé par la suite du programme pour exécuter la requête et exploiter le résultat. On peut combiner deux OCIParse sur le même identifiant de connexion ($connexion) et récupérer les 2 résultats dans 2 variables $stmt1 et $stmt2 pour exécuter 2 requêtes en même temps sur la même base. L'exécution s'effectue ensuite avec la fonction OCIExecute : OCIExecute($stmt);Cette fonction prend en argument le résultat renvoyé par OCIParse. Les appels de procédures stockées et les macros PL/SQL se font exactement de la même façon : L'utilisation de OCIBindByName sera expliquée plus bas. Notez qu'une requéte PL/SQL normale (SELECT, UPDATE, INSERT...) ne se termine pas par un point-virgule (";"), alors que l'appel à une procédure stockée se termine avec un point-virgule (";"). Lire le résultat d'une requêteIl faut utiliser conjointement 2 fonctions : OCIFetch et OCIResult. OCIFetch permet de récupérer une ligne du résultat, alors que OCIResult permet de lire une valeur d'une ligne récupérée par OCIFetch. Dans l'exemple suivant, on va interroger la table articles contenant les colonnes article et prix : Ces deux fonctions utilisent, comme OCIExecute la variable $stmt renvoyée par OCIParse. Attention ! Le nom des colonnes utilisé avec OCIResult doit être en majuscule. Même si la requéte ne renvoie qu'une seule ligne (cas d'un "SELECT COUNT(*)" par exemple), il est indispensable de faire un OCIFetch pour récupérer le résultat. Exemple : Vous noterez l'utilisation d'une variable $compteur dans l'exemple précédent. Cela n'est pas innocent. En effet, contrairement à MySQL et la fonction mysql_num_rows, il n'est pas possible de connaître directement le nombre de lignes renvoyées par une requête SELECT. Il existe pourtant une fonction OCIRowCount, mais elle ne permet de récupérer qu'un nombre de lignes modifiées. On ne peut l'utiliser qu'avec une requête UPDATE ou INSERT, par exemple. Paramètres de procédures stockées et variables longuesOn construit très souvent des requêtes SQL dynamiques en insérant directement dans la requéte la valeur des variables : Cela est très pratique, mais pour les variables très grandes (des textes renvoyés par des formulaires par exemple), on se trouve confronté à un problème : on ne peut pas écrire de requête contenant plus de 4000 caractères environ. Ce problème se résoud en utilisant la fonction OCIBindByName : OCIBindByName va alors associer la variable $texte_formulaire à l'identifiant
:texte utilisé dans la requête (veuillez noter l'utilisation des ":" dans la requête).
$texte_formulaire doit être passé à la fonction par référence.
C'est pour cela qu'on utilise Cette fonction s'utilise toujours avant OCIExecute et après OCIParse. Cette fonction sert aussi à passer les arguments des procédures stockées, comme nous l'avons vu précédemment. Terminer une requêteLorsqu'on a finit d'utiliser un résultat de requête, il est préférable de libérer les ressources allouées avec la fonction OCIFreeStatement : On ferme la connexion au serveur Oracle avec la fonction OCILogOff. Fonctions utiles
RéférenceLa section OCI8 du site php.net |
|||||||||||||||||||||||
|
Copyright © 2000-2006 themanualpage.org - Ce site est soumis aux conditions décrites dans les licences GNU GPL et FDL. |
||||||||||||||||||||||||