Vous êtes sur la page 1sur 13

PREAMBULE Aprs PHP et LDAP, voici PHP et ORACLE Dans ce cours nous allons voir comment effectuer des

s requtes simples sur une base de donnes Oracle distante (Base hberge sur un serveur distant) via un lien ODBC (Old Dirty Bastard Connard ... heu non Open DataBase Connectivity). Nous allons donc utiliser la librairie php ODBC, accessoirement nous parlerons galement de OCI8. Nous allons arborer les sujets suivants tout au long de ce cours : 1 2 3 4 Installation de Oracle Cration dun DSN dans ODBC Paramtrage PHP (4.x) Premier script de connexion

1 INSTALLATION DORACLE Oracle est un systme de gestion de base de donnes trs utilis en entreprise. Pour plus dinformation sur Oracle : http://fr.wikipedia.org/wiki/Oracle_ %28base_de_donn%C3%A9es%29 Dans notre cours nous avons install une version 9.2.1.0 dOracle. Rien de spcial dans linstallation, suivant, suivant, suivant, termin. Une fois Oracle install, nous devons vrifier deux petites choses : a - La prsence du fichier TNSNAMES.ORA b - Le path Oracle dans les variables denvironnement systme. a - Vous devez renseigner un fichier TNSNAMES.ORA qui contiendra toute les informations relatives la base de donnes sur laquelle vous dsirez vous connecter. Ce fichier se trouve C:\Oracle\V9.2\network\ADMIN\TNSNAMES.ORA. Vous devez entrer les informations de votre base de donnes comme ci-dessous. Si vous ne disposez pas de ces informations, prenez contact avec un DBA Oracle. TUTOMANIA.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = tutomania.com)(PORT = 1650)) ) (CONNECT_DATA = (SID = TUTOMANIA.WORLD) (SERVER = DEDICATED) ) ) b Il faut vrifier que le path Oracle soit bien dfinit dans le path systme et quil soit bien report dans PHP. Pour le path systme faite un clic droit sur licne poste de

travail du bureau puis Proprits . Allez ensuite dans longlet Avanc puis cliquez tout en bas sur Variables denvironnement .

Dans le champ variables systme double cliquez sur path et assurez vous que le rpertoire bin de Oracle est bien insr (c:\Oracle\V9.2\bin;).

Sans cette variable systme votre Oracle ne peut pas fonctionner. Une fois la variable en place nous pouvons tester linstallation dOracle par un simple utilitaire en ligne de commande : Tnsping. Pour ce faire lancer une Invite de commande (Dmarrer > Executer > cmd) Et entrez la commande suivante : tnsping

Si le TNSPING vous rpond comme ci-dessus cest que votre path est bon.

2 CREATION DUN DSN DANS ODBC Maintenant que notre installation Oracle est oprationnelle nous allons crer un lien ODBC vers une base de donnes Oracle. Cest ce lien qui sera utilis par PHP pour requter la base Oracle. Pour lancer ODBC deux mthodes, par le panneau de configuration en cliquant dans Outils dadministrations > Sources de donnes (ODBC) ou bien Dmarrer > Executer > odbccp32.cpl.

Cliquez sur longlet System DSN (la diffrence entre User DSN et System DSN est explique dans le petit cadre en bas, notion de Local machine et Current user dans la base de registre). Un DSN Systme sera accessible pour tous les utilisateurs du poste, le DSN utilisateur est pour lutilisateur actuellement connect.

Cliquez maintenant sur Add , il vous demande de choisir le driver que vous voulez utilisez. Celui dpend de la base de donnes que vous voulez requeter. Ici cest du Oracle alors on choisit le Oracle dans OraHome92 .

Dans la fentre suivante on vous demande les informations de connexion. Data Source Name : Nom du lien ODBC (Attention pas le nom de la base), vous pouvez choisir le nom que vous voulez. Description : Bah euh comment dire TNS Service Name : Si vous avez bien configur votre TNSNAME.ORA et que vous cliquez sur la flche du champ il vous slectionnera directement les bases de donnes figurant dans ce fichier. (Dans notre exemple : DESKINT) User ID : Nom dutilisateur autoris requter sur la base de donnes.

Pour tester la connexion cliquez sur Test connection et entrez vos identifiants puis OK.

Voila la partie Oracle est maintenant termin, pour le moment.

3 PARAMETRAGE PHP (4.x) Allons-y, tout dabord la premire chose faire est de charger les extensions Oracle. Alors attention sur ce point car si vous dsirez utiliser la librairie OCI8 de PHP il faut charger le module par contre le module ODBC est charg directement dans easyPHP maintenant. Dailleurs nous pouvons lire les informations suivantes dans le php.ini : Note that MySQL and ODBC support is now built in, so no dll is needed for it. Si toutefois et selon la version de php il vous faut charger manuellement la DLL procdez comme suit : Dans votre fichier php.ini trouver la liste des extensions et dcommenter (enlever le ;) devant php_odbc.dll. A titre indicatif voici la liste des extensions php.

Lorsque vous activer une librairie Php vous devez relancer votre serveur Apache (EasyPhp dans notre exemple). Il se peut que vous ayez un message derreur relatif lemplacement de la dll. ( Unknown() ; Unable to load dynamic libray c:\Program Files\easyPHP\php\extensions\Votre DLL The specified module could not be found )

Ce message derreur est frquent sur le chargement de quelques librairies. Dautant plus bizarre car les librairies sont bien prsente dans le chemin quil donne.

La solution est plutt simple, en fait ce nest pas la librairie proprement dites quil manque mais une dpendance de celle-ci. Je mexplique, une librairie fait gnralement appelle dautres librairies, cest celles-ci quil manque. Pour connatre les dpendances dun librairie il existe des petits logiciels gratuit trs performent, notamment Dependency Walker . Je vous montre un exemple de la dll cite ci-dessus (php_yaz.dll), en chargeant la dll il nous indique quune dpendance na pas t trouve (MPR.dll)

Il vous faut donc tlcharger cette DLL et la plac dans c:\windows\system32 et le tour est jou. Pour le module OCI8 de php il a besoin de oci.dll et/ou oci32.dll, ces dll se trouvent dans le rpertoire bin de Oracle. Copiez les dans System32. La dernire chose vrifier ensuite est dans ladministration de EasyPhp, voir si le module dsir est bien charg et si les variables denvironnement sont bien remontes. Faites un clic droit sur licne EasyPhp puis Administration et vrifiez que ODBC est bien charg, OCI8 si vous voulez utilisez cette librairie aussi.

Cliquez ensuite sur PHPInfo pour vrifier les variables denvironnements sous php. Tout en bas, vous avez dans le bloc Environment un paragraphe Path . Vrifiez bien dans celui-ci si la variable Oracle Bin est bien dfinit. Dans notre exemple c:\Oracle\Ora92\bin . Sen est fini de la configuration PHP et ORACLE. Finalement si nous nous servons de la librairie ODBC il nous faut juste installer proprement Oracle et tout devrait fonctionner. Cependant nous ne sommes jamais labris dune installation bizarre, mais je pense quavec toutes les petites infos cidessus on arrive au rsultat escompt.

4 PREMIER SCRIPT DE CONNEXION (Php 4.x) Dans notre premier script de connexion nous allons utiliser la librairie odbc. Pour nous connecter notre lien Odbc nous utiliserons : odbc_connect();

odbc_connect(); a besoin de trois informations, le nom du DSN (pralablement cr dans le paragraphe 2), le username et le password. Ce qui nous donne le bout de code suivant : <?php $dsn="DESKSINT"; $username="reporting"; $password="reporting"; $cnx = odbc_connect($dsn, $username, $password); If($cnx) { echo Connexion ODBC russie ; }else{ echo Problme de connexion ODBC; } ?> Il sagit ici juste de savoir si la connexion est oprationnel ou pas. De plus si cela ne fonctionne pas vous aurez un message derreur gnralement type ORA-XXXX. Et cest la que les problmes commence :), vous pouvez avoir un problme listener, SID, SQL_HANDLED etc dans ce cas de figure, go forum, cest analyser au cas par cas. Par contre sachez cependant que les du temps cest du une mauvaise configuration soit de Oracle, du tnsnames.ora ou de php. Donc relisez bien chaque tape. Amliorons un peu le code pour gnrer laffichage des tables de votre base de donnes Oracle. <?php $dsn="DESKSINT"; $username="reporting"; $password="reporting"; $cnx = odbc_connect($dsn, $username, $password); If($cnx) { echo Connexion ODBC russie ; $sql = "SELECT * FROM VOTRE_BASE"; $result=odbc_exec($cnx, $sql); echo "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">"; echo "<tr>"; //Listage des noms des tables $colName = odbc_num_fields($result); for ($j=1; $j<= $colName; $j++) { echo "<td bgcolor=\"#CCCCCC\" >"; echo odbc_field_name ($result, $j );

echo "</td>"; } //Fin de listage des tables //Affichage des rsultats while(odbc_fetch_row($result)) { echo "<tr>"; for($i=1;$i<=odbc_num_fields($result);$i++) { echo "<td style=\"padding: 10px\">"; echo odbc_result($result,$i); echo "</td>"; } echo "</tr>"; } echo "</td> </tr>"; echo "</table>"; }else{ echo Problme de connexion ODBC; } ?> Vous pouvez copier/coller le code ci-dessous pour tester vos connexions : <?php $database="votre dsn dans odbc"; $username="login"; $password="password"; $cnx = odbc_connect($database, $username, $password); $nrows=0; echo " <b>Stats du mois en cours</b>"; if ($cnx) { $sql = "SELECT * FROM VOTRE_TABLE"; $result=odbc_exec($cnx, $sql); echo "<table cellpadding=\"2\" cellspacing=\"2\">"; echo "<tr>"; while(odbc_fetch_row($result)) { echo "<tr>"; for($i=1; $i<=odbc_num_fields($result); $i++) { echo "<td style=\"padding: 10px\">"; echo odbc_result($result,$i); echo "</td>"; }

echo "</tr>"; } echo "</td> </tr>\n"; echo "</table >\n"; if ($nrows==0) echo "<br/><center> Aucun rsultat</center> <br/>"; else echo "<br/><center> Total Enregistrements: $nrows </center> <br/>"; odbc_close ($cnx); } else echo "odbc non connect <br />"; ?> Jai rcupr ce bout de code sur le manuel php, il fonctionne merveille. Allez bon courage tous et venez sur le forum si vous rencontrez des soucis. Sky, Tutomania.

Vous aimerez peut-être aussi