Vous êtes sur la page 1sur 27

Oracle et PHP, by DD

Confrence 'Faire intragir PHP et Oracle'


19 novembre 2004 Par Didier Deleglise - http://didier.deleglise.free.fr

Introduction
q q

Pourquoi Oracle et PHP ? objectifs de la confrence

Mieux cerner le SGBD Oracle


q q q

famille de produits L(a jungle d)es versions d'Oracle DB spcificits d'Oracle vu cot dveloppeur (MySQL)

Architecture et configuration
q q q q

Base locale base distante configuration Oracle Net en cas de problme ?

Les extensions Oracle de PHP


q q q

les diffrentes versions taxinomie des fonctions logique des traitements

http://didier.deleglise.free.fr/conferences/afup_2004/index.htm (1 sur 2) [22/12/2004 17:06:23]

Oracle et PHP, by DD

Un defi : connecter PHP Oracle


q q q q q

les tapes une mise en oeuvre rapide une mise en oeuvre...moins rapide code minimal de connexion exemple de connexion explicite ou non

Exemples de code PHP Oracle Un exemple d'application gnrique Oracle / PHP : Ze Cow, by DD Conclusion
q q

PHP, Oracle ET mysql ? conseils de mise en oeuvre

Webographie

http://didier.deleglise.free.fr/conferences/afup_2004/index.htm (2 sur 2) [22/12/2004 17:06:23]

Confrence AFUP 2004 : Oracle & PHP - 1 by DD

Introduction
Pourquoi Oracle et PHP ?
Php ?...
;-)

Oracle($) ?
fournisseur n1 de SGBDR au monde, 2eme fournisseur de logiciel. En gros 1/3 de mme qu'IBM, microsoft +- 15% D'aprs les rsultats compars du 'Gartner group' et IDC en 2003 Total RDBMS IBM 36.2% Oracle 33.9% Microsoft 18% Unix and Windows RDBMS Oracle 42.5% IBM 24.2% Microsoft 22.8% Oracle + de 50% sur Unix Oracle sur Linux a augment de 360% (parti de rien ...?) en 2003 et reprsente 69% du march. IBM's est pour sa part pass de 57% en 2002 28% en 2003.. Quelques chiffres, que nous renvoie Google (oct. 2004) : mots cls php (htm) mysql oracle SQLServer Nb de pages trouves 388 000 000 392 000 000 18 700 000 15 000 000 6 500 000 mots cls php + mysql php + oracle asp + "sql server" sex the Nb de pages trouves 7 380 000 3 400 000 3 100 000 178 000 000 5 800 000 000

Les Objectifs de la confrence


Ces objectifs m'ont t dicts par l'exprience, principalement par les questions qui me sont frquemment poses sur Oracle et PHP, par mail ou sur mes forums. Ils ont donc pour but, sans entrer dans la technologie Oracle qui serait hors de propos, de montrer les aspects incontournables qui posent de manire rcurrente des problmles lors de la mise en ouvre de Datawebs base de PHP et Oracle. A l'issue de cette prsentation vous pourrez (normalement) :

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_introduction.htm (1 sur 2) [22/12/2004 17:06:23]

Confrence AFUP 2004 : Oracle & PHP - 1 by DD

comprendre les spcificits d'Oracle q vis vis d'autres SGBDRs q quant son environnement systme q quant son architecture n tiers comprendre l'change d'informations entre Oracle et PHP comprendre la squence d'un script PHP Oracle eviter les ecueils de mise oeuvre en amont et pendant le dveloppement

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_introduction.htm (2 sur 2) [22/12/2004 17:06:23]

Oracle et PHP, by DD

Mieux cerner le SGBD Oracle


Famille de produits
Oracle est on l'a dit dsormais un fournisseur de logiciels. Ils sont divers et varis, on vitera donc de confondre (notamment lors du choix / tlchargement / installation / configuration) les produits : q serveur de donnes (Database Server ou Oracle DB), q outils de dveloppement client serveur et web (Oracle Forms, Developper 2000, Developper suite, Webdb, portal) q outil de reporting (Oracle Report), q ateliers de gnie logiciel (Oracle Designer), q serveurs d'application (Oracle WAS, IAS) q serveurs techniques : LDAP, mail, http, etc... et aussi q toute une famille de progiciels applicatifs (RH, compta, e learning, ...)

L(a jungle d)es versions d'Oracle DB


Nom de la version Dclinaisons #release associ 8 8iR1 8.0.* 8.1.5 8i 8iR2 8.1.6 8iR3 8.1.7 9iR1 9.0.1 9i 9iR2 9.2.0.* redhat E 2.1 (avec update 3) redhat E 3 Suze ES 9 asianux (powered by) UnitedLinux : Conectiva Enterprise, Suse ES 8, TurboLinux E8 10g 10gR1

principaux OS certifis

redhat 6.2 redhat 7.2 suse 6.4

redhat 6.2 redhat 7.2 suse 6.4

redhat 6.2 redhat redhat 7.2 7.2 suse 6.4 suse 7.0 suze ES 7

redhat AS 2.1 suze ES 7 suze ES 8

poids client indicatif poids serveur indicatif

350 MO 2,5 GO 800 MO + 1 GO pour la DB 3,5 GO + 1 GO pour la DB 2,5 GO + 1,2 GO pour la DB

A la diffrence des autres OS, la plupart des distributions des clients Oracle pour Linux ne sont pas

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_oracle.htm (1 sur 3) [22/12/2004 17:06:24]

Oracle et PHP, by DD

disponibles sparment mais se prsentent comme une option particulire de l'installation du serveur Voir la documentation officielle d'installation des diffrentes versions pour les prrequis logiciels (niveau du kernel, glibc, gnucc, JVM, etc.) et notamment : Oracle Database Quick Installation Guide 10g R1 for Linux x86 et Oracle9iR2 Installation Guide for Unix and linux

Spcificits d'Oracle vu cot dveloppeur (MySQL)


Au dela des diffrences fonctionnelles, et du support plus ou moins avanc des caractristiques d'un 'vrai' SGBDR, qui suscite parfois des dbats passionns sur le net, nous aborderons ici les diffrences impactant directement le dveloppement. En fonction de la version de MySQL ou du moteur choisi, on trouvera ci aprs quelques particularits dont il faudra le cas chant tenir compte : q sous requtes Toutes les versions d'Oracle supportent les sous requtes SQL (SQL subqueries) qui remplacent parfois avantageusement les jointures en terme de performance et qui peuvent sembler plus 'intuitives' q procdure stockes Toutes les versions d'Oracle supportent les procdures, fonctions stocks et les triggers q (sous) transactions Toutes les versions d'Oracle supportent les transactions (COMMIT, ROLLBACT et SAVEPOINT TO) qui devront suivant le mode de fonctionnement de PHP choisi tre explicitement gres q vues Toutes les versions d'Oracle supportent les VUES (SELECT catalogus) en consultation ET mise jour, ce qui permet une meilleure volutivit du code et une meilleure indpendance physique / logique, et entre donnes et traitements q LOBs Les versions suprieures la 9i supportent les LOBs (CLOBs et BLOBs) vis des descripteurs, et prfrablement en utilisant des packages PL/SQL prdfinis. Les versions prcdentes offrent des 'LONG' trs contraignant manipuler q 'compteurs' Il n'existe pas de champ auto incrment (compteur) dans les tables Oracle. Il est obligatoire d'utiliser une structure mmoire externe, dfinie en SQL : les SEQUENCES q jointures Sur les versions infrieures la 9i, les oprateurs standards de jointure (LEFT JOIN, RIGHT JOIN, OUTER JOIN ne sont pas supports. Un oprateur spcial est utilis leur place : '(+)' q casse du rfrentiel ATTENTION la casse : dans Oracle, sauf en cas d'import d'objets extrieurs, toutes les structures (tables, index, vues, procdures stockes, etc.) sont nommes en MAJUSCULE dans le rfrentiel q tables du rfrentiel la totalit des mta donnes (mais aussi des infos systmes, et des infos temps rels) sont accessible en SQL q types de donnes

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_oracle.htm (2 sur 3) [22/12/2004 17:06:24]

Oracle et PHP, by DD

Quelques spcificits PHP vu du cot du dveloppeur (Oracle)


q q

Authentification : Externe (OS level) , SYSOPER et SYSDBA non supportes NVHAR et NCLOB non supportes

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_oracle.htm (3 sur 3) [22/12/2004 17:06:24]

architecture et config d'un serveur Oracle, by DD

Architecture et configuration
rappel : un serveur peut accueillir PLUSIEURS serveurs de donnes Oracle

Base locale
La base est situe sur le serveur, et est accde directement sans passer par un protocole rseau (mme en loopback) Le logiciel (SGBD) et le serveur de donnes Oracle (BD) sont identifis au niveau de l'environnement systeme. 2 variables fondamentales : ORACLE_HOME : racine d'installation du logiciel en version N ORACLE_SID : l'identifiant LOCAL de la base 1 optionnelle : PATH ( $ORACLE_HOME/bin) $ export ORACLE_SID=TEST $ export ORACLE_HOME=/oracle/ora92 ou sous XP voir le contenu de la base de registre pour une 9.2 pour se connecter : connect user/password

Base distante
la base est situe sur un serveur distant, et est accde via une couche rseau spcifique ORACLE Net qui s'appuie sur un protocole standard (en gnral TCP/IP). On est soit en architecture 2 tier ou 3 tier comme sur le schma suivant :

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_archi.htm (1 sur 3) [22/12/2004 17:06:24]

architecture et config d'un serveur Oracle, by DD

Les conditions minimales : q un client Oracle sur le poste client q un rseau oprationnel entre client et serveur (TCP/IP, SPX/IPX, decnet, etc.) q une base ouverte et un listener actif sur le serveur (TNSListener : process daemon Linux ou service windows) q l'identification exhaustive de la base distante (IP serveur, nom de la base sur le serveur distant, port d'coute du listener) pour se connecter : connect user/password@base_distante base_distante peut ventuellement tre omise si on spcifie sa valeur par dfaut dans la variable d'environnement TWO_TASK (unix) ou LOCAL (windows)

Configuration Oracle net


configuration du client
- variables indispensables : q le rpertoire d'installation d'Oracle : $ORACLE_HOME q le rpertoire des fichiers de config : $ORACLE_HOME/network/admin ou $TNS_ADMIN

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_archi.htm (2 sur 3) [22/12/2004 17:06:24]

architecture et config d'un serveur Oracle, by DD

- un outil graphique de configuration : Net manager pour faire la config du client (Sous windows Dmarrer Programme / Oracle / Configuration and Migration tools / Net manager - 1 ou 2 fichiers dans le rpertoire de config : sqlnet.ora et optionnellement tnsname.ora q sqlnet.ora : ordre et choix des mthodes de rsolution de nom (local, Oracle NAME, DNS, LDAP ) q tnsnames.ora : fichier local de rsolution des noms de serveurs de donnes distants (si utilis) on peut se passer de fichier de configuration client en utilisant soit l'identification explicite (8i et 9i) ou en utilisant EZConnect (10g) : user/password@nom_serveur:no_port/nom_service

configuration du serveur
1 fichier listener.ora de paramtrage du listener OracleNet, dans $ORACLE_HOME/network/admin/ ou $TNS_ADMIN, qui spcifie les bases accessibles sur le serveur et leur mode d'accs. Apache doit tre dmarr en 'connaissant' l'environnement Oracle minimum (ORACLE_HOME, PATH Oracle). on peut pour ce faire modifier le ficheir 'profile' du user apache qui lance le dmon httpd.

En cas de problme ?
Serveur de donnes OK ? : tester l'acces Oracle en local sur le serveur ($ORACLE_HOME/bin/sqlplus SCOTT/TIGER) sinon dmarrer la base Listener OK ? : vrifier que le daemon TNSListener ou le service tourne, tester l'acces client / serveur en Loopback sur le serveur ($ORACLE_HOME/bin/sqlplus SCOTT/TIGER@ma_base) sinon dmarrer le listener liaison client / serveur OK ? : tester connexion EZconnect ou explicite : $ORACLE_HOME/bin/sqlplus SCOTT/TIGER@mon_serveur_distant:1521/ma_base_distante vrifier la rsolution de nom : l'environnement Oracle (ORACLE_HOME et / ou TNS_ADMIN) et la mthode utilise, si locale le tnsnames.ora du client

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_archi.htm (3 sur 3) [22/12/2004 17:06:24]

Oracle et PHP, by DD

Les extensions Oracles de PHP


les diffrentes versions
extension oracle
q q

en voie d'obsolescence avance (V7 ou V 8.0 du noyau Oracle) fonctionnalits rduites

extension oci8
q q q q

partir de la 8i, mais aussi 9i, 10g d'une cinquantaine de fonctions d'accs Oracle plus de 110 suivant les versions de PHP gestion des types avancs (LOBs, descripteurs de fichiers, objets, collections, ROWIDs) meilleure gestion des mta donnes

On utilisera l'une ou l'autre de manire exclusive, en fonction de la version du client Oracle install sur le 'serveur' PHP

Php4 et Php5
Les noms de fonctions de l'extension OCI8 ont chang en PHP5. Les anciens noms sont encore supports (il existe des Alias). La principale volution est l'ajout de caractres '_' ou 'underscore'. Ainsi ociexecute() est devenu oci_execute() ocibindbyname est devenu oci_bind_by_name(). Quelques ajouts et modifications significatifs : q les fetchs se sont clarifis et enrichis q il existe de nouvelles fonctions lob-> * , collection->* , descriptor* q les (de)connexions ont chang : les oci*logon deviennent oci*connect, ocilogoff devient oci_close

taxinomie des fonctions


oci_connect gestion des connexions gestion des erreurs gestion des ordres SQL oci_pconnect oci_new_connect oci_close oci_error oci_internal_debug oci_new_cursor oci_parse oci_execute oci_free_statement ouvre une connexion a Oracle ouvre une connexionpersistante ouvre une nouvelle connexion a Oracle (mme si les paramtres sont identiques) ferme la connexion renvoie la dernire erreur (in)valide le deboggage alloue un nouveau curseur prepare / analyse un ordre SQL pour execution Execute un ordre SQL libre les ressources associes l'ordre ou au curseur

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_extensions.htm (1 sur 4) [22/12/2004 17:06:24]

Oracle et PHP, by DD

gestion des variables de communication

oci_define_by_name oci_bind_by_name oci_set_prefetch oci_fetch_all oci_fetch_array oci_fetch_assoc

assigne une colonne du SELECT une variable de rception PHP associe une variable d'envoi Oracle une variable PHP

lecture des lignes

oci_fetch_object oci_fetch_row oci_fetch oci_result oci_cancel oci_server_version oci_field_is_null oci_field_name oci_field_precision

dfinit le nb de ligne ramener de manire anticipe ramne les lignes dansun tableau ramene la ligne suivante dans un tableau associatif ou non ramene la ligne suivante dans un tableau associatif ramene la ligne suivante dans un type objet ramene la ligne suivante dans un tableau numrique ramne la ligne suivante ramne la valeur de la colonne arrete la lecture du curseur

gestion des mta donnes

oci_field_scale oci_field_size oci_field_type_raw oci_field_type oci_num_fields oci_num_rows oci_statement_type oci_password_change oci_commit oci_rollback

version du noyau Oracle verifie si le champ est NULL renvoie un n om de colonne de l'ordreSQL donne la precision d'une colonne donne l'echelle d'une colonne la taille de la colonne quel type RAW le type de la colonne nb de colonnes du resultat nb de lignes ramenes ou traites type de l'ordre SQL change le mot de passe du user

gestion explicite des transactions gestion des descripteurs

valide les ordres de la transaction en cours annule les ordres de la transaction en cours

descriptor->free oci_new_descriptor

libre les ressources associes au descripteur initialise un n ouveau pointeur ou descripteur

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_extensions.htm (2 sur 4) [22/12/2004 17:06:24]

Oracle et PHP, by DD

oci_lob_copy oci_lob_is_equal lob->append lob->close lob->eof lob->erase lob->flush lob->import gestion des LOBs lob->load lob->read lob->rewind lob->save lob->seek lob->size lob->tell lob->truncate lob->writeTemporary lob->write oci_new_collection collection->append collection->assign collection->assignElem collection->getElem collection->max collection->size collection->trim collection->free

copie un LOB compare 2 pointeurs de LOBS ou fichiers "concatene" 2 LOBs libre le descripteur testet le EOF d'un descripteur efface une partie des infos du LOB ecrit (flush) le buffer sur disque importe des infos dans le LOB renvoie le contenu du LOB lit partiellement un LOB reinitialise le pointeur en dbut de LOB sauvegarde les infos dans le LOB positionne le pointeur de LOB donne la taille du LOB donne la position courante du pointeur de LOB vide le LOB ecrit un LOB temporaire ecrit les infos dans le LOB

gestion des Collections

alloue une nouvelle C "concatene" un object a une C recopie la valeur d'une C assigne une valeur a 1 element d'une C donne la valeur de l'lment donne le nb max d'lmnets de la C donne la taille de la C supprime les elts superflus en fin de C libre les resoources associes a la C

logique des traitements


La squence complte de l'ordre le + compliqu : SELECT avec paramtre est la suivante :

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_extensions.htm (3 sur 4) [22/12/2004 17:06:24]

Oracle et PHP, by DD

Dans le cas d'un ordre (SELECT ou mise jour ou LDD) sans paramtre l'tape 4 est omise. Dans le cas d'un ordre de mise jour ou du LDD l'tape 6 est omise

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_extensions.htm (4 sur 4) [22/12/2004 17:06:24]

Oracle et PHP, by DD

Un dfi : Connecter PHP Oracle


Les tapes
q q q q q

Installer un serveur Oracle (creer une base !) , sur une machine distante ou non Installer un client Oracle (si on est sur une seule machine, le client est install avec le serveur) Configurer la partie rseau du client Ajouter si necessaire les extensions Oracle au module PHP Tester la connexion

Une application trs rapide (mais certes un peu obsolte) sous windows
q

Rcuprer et installer une base 10g sur Windows (avec sa cration de BD par dfaut, et les comptes de dmo). on peut la tlcharger sur O.T.N aprs s'tre enregistr Rcuprer et installer EasyPHP voir easyphp.org Aller dans le menu administration de easyphp et rajoutez (cochez) l'extension Oracle Utilisez mon formulaire HTML de test de connexion Oracle / php qui appelle test_connect1.php et test_connect2.php ...et ca marche.

q q q

Le formuulaire de test permettant, soit une connexion directe (pour les versions 8i et suprieure) soit une connexion de type 'EZ connect' (pour la 10g) aucune configuration de la couche rseau d'Oracle n'est ncessaire ici...

Une application moins rapide (et moins obsolte) sous windows


q

q q

Rcuprer et installer un Oracle 10g sur Windows (avec sa cration de BD par dfaut, et les comptes de dmo). On peut la tlcharger sur O.T.N aprs s'tre enregistr (tester la connexion avec SQLPlus dans le compte de dmo scott/tiger dans la base de test cre l'install) Rcuprer et installer Apache 1.3.31 pour windows Rcuprer les binaires de PHP 5.0.2 et les copier dans c:\PHP502 par exemple Apache 2.0 + PHP ne sont pas forcment conseills sur cette plate forme... dfinir PHP5 comme un module d'apache : ajouter dans httpd.conf :

LoadModule php5_module "c:/php_502/php5apache.dll" AddModule mod_php5.c SEtEnv PHPRC C:/php_502 AddType application/x-httpd-php .php DirectoryIndex ... index.php

on fait la modif manuellement l'installeur windows n'aurait pas configur Apache de toutes faons... et on a choisi module plutt que CGI, car CGI ncessite de la config supplmentaire pour tre correctement scuris... q Configurer PHP pour les extensions oci8 d'Oracle : dans php.ini ( C:\WINDOWS par dfaut) :

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_connexion.htm (1 sur 2) [22/12/2004 17:06:25]

Oracle et PHP, by DD

faire pointer si ncessaire extension_directory sur le rpertoire adquat extension_dir = "c:\php_502\ext" enlever le commentaire sur la ligne :
extension=php_oci8.dll

un aperu dans la config de PHP devrait nous confirmer qu'Oracle est dsormais pris en compte :

on remarque que dans cette version; les LOBs et les collections sont supportes Utilisez mon formulaire HTML de test de connexion Oracle / php qui appelle test_connect1.php et test_connect2.php ...et ca marche...aussi

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_connexion.htm (2 sur 2) [22/12/2004 17:06:25]

exemples de code et scripts PHP Oracle, by DD

Exemples de code PHP Oracle


Style PHP 4
q q q q q

select 1 select2 ordre de mise jour simple ou du LDD ordre de mise jour paramtr procdure stocke

Style PHP 5
q q q q q

select 1 select 2 ordre de mise jour simple ou du LDD ordre de mise jour paramtr procdure stocke

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_exemples.htm [22/12/2004 17:06:25]

Document sans titre

Quelques exemples d'utilisation de Ze Cow


Liste simple d'employs avec masquage de certaines colonnes

URL d'appel : http://mon_serveur/cow//affiche_liste.php?nom_projet=employes Fichier de config correspondant : ../config/employes.ini remarque : la premire et l'avant dernire colonne (no d'employe et commission) ont t masques grace au paramtre AFFICHE_COLONNE

Liste d'employs avec lien sur dtail du dpartement

http://didier.deleglise.free.fr/conferences/afup_2004/cow_exemples/index.htm (1 sur 3) [22/12/2004 17:06:26]

Document sans titre

et apres le clic sur le no de departement 20 de Mr FORD une fentre POPUP apparait (miraculeusement)

URL d'appel : http://mon_serveur/cow/affiche_liste.php?nom_projet=employes_dept Fichiers de config correspondant : ../config/employes_dept.ini et pour la POPUP ../config/departements.ini

Cration et / ou modification d'un employ

http://didier.deleglise.free.fr/conferences/afup_2004/cow_exemples/index.htm (2 sur 3) [22/12/2004 17:06:26]

Document sans titre

URL d'appel : http://mon_serveur/cow/affiche_formulaire.php?nom_projet=employes_creation&maj=1 Fichiers de config correspondant : ../config/employes_creation.ini si on clique sur 'crer une nouvelle fiche' les infos sont insres dans la base, sinon on clique sur 'rechercher' (avec ou sans critres) on va pouvoir modifier les fiches existantes via l'cran suivant :

URL d'appel : http://mon_serveur/cow/affiche_liste.php?nom_projet=employes_creation&maj=1 Fichiers de config correspondant : ../config/employes_creation.ini

http://didier.deleglise.free.fr/conferences/afup_2004/cow_exemples/index.htm (3 sur 3) [22/12/2004 17:06:26]

Oracle et PHP, Conclusion

Conclusion
PHP, Oracle ET mysql ?
Oracle et MySQL peuvent cohabiter ou tre complmentaires, par exemple : q une plate forme LAMP pour les applis web de consultation et une plate forme Unix ou Linux pour les applications Web transactionnelles ou lea spplications clients / serveurs q une plate de forme de developpement lgre (un poste Windows avec EasyPHP) une plate de forme de mise en production prouve (Linuux + Apache + Oracle)

moyennant un code PHP portable via un Data Abstraction Layer par exemple

conseils de mise en oeuvre


Think small (and simple) faire des test uniqtaires lors de l'installation et de la configuration

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_conclusion.htm [22/12/2004 17:06:26]

Oracle et PHP, by DD - webographie

Oracle et PHP : webographie


les FAQs non officicielles incontournables de frank Naude http://orafaq.com Oracl et PHP Troubleshooting http://www.oracle.com/technology/tech/opensource/php/php_troubleshooting_faq.html le forum de discussion de DD (dont un sur les logiciels libres) http://didier.deleglise.free.fr/w-agora/index.php?site=oracle la page Open Source d'Oracle http://www.oracle.com/technology/tech/opensource/index.html Install Oracle, Apache et PHp sur RedHat AS http://www.oracle.com/technology/tech/opensource/php/apache/inst_php_apache_linux.html le laboratoire Oracle de Supinfo Paris http://www.labo-oracle.com le site d'autoformation Oracle et autres technologies , de DD http://didier.deleglise.free.fr/ la doc officielle Oracle http://tahiti.oracle.com un comparatif des concepts et syntaxes SQL de diffrents SGBDRs (Oracle, MySQL, SQLServer) http://sqlzoo.net tlcharger une version d'Oracle http://www.oracle.com/technology/software/index.html SQL d'Oracle et la norme http://www-db.stanford.edu/~ullman/fcdb/oracle/or-nonstandard.html

http://didier.deleglise.free.fr/conferences/afup_2004/oracle_et_php_webographie.htm [22/12/2004 17:06:26]

http://didier.deleglise.free.fr/conferences/afup_2004/select1_new.txt

<?php // select1.php5 // oci_fetch_array => lecture ligne par ligne // ici dans un tableau numerique // et accepte les valeurs NULL (attention a OCI_FETCH_ROW) // il n'est donc pas ncessaire de connaitre // le nom ou les valeurs des colonnes... // connexion $conn = oci_connect("scott","tiger"); // prparation du Select $sql1 = "SELECT * FROM EMP "; $ordre = oci_parse ($conn, $sql1); oci_execute ($ordre); $ncols = oci_num_fields ($ordre); // affiche les lignes tant qu'il y en a // et les colonnes une par une print "<TABLE BORDER=1> "; while ($ligne = oci_fetch_array($ordre, OCI_NUM + OCI_RETURN_NULLS)) { print "<TR> "; for ( $i=0;$i < $ncols; $i++) { print "<TD> $ligne[$i] </TD>" ; } print "</TR> "; } // libere les ressources oci_free_statement($ordre); oci_close($conn); ?>

http://didier.deleglise.free.fr/conferences/afup_2004/select1_new.txt [22/12/2004 17:09:03]

http://didier.deleglise.free.fr/conferences/afup_2004/select2_new.txt

<?php // select2.php5 // fetch utilisant explicitement les colonnes utiles // et utiliser autant de variables que de colonnes // connexion $conn = oci_connect("scott","tiger"); // prparation du Select $sql1 = "SELECT empno, ename FROM EMP "; $ordre = oci_parse ($conn, $sql1); // on definit les variables de reception // avant execution de l'ordre oci_Define_By_Name ($ordre, "EMPNO", $no); oci_Define_By_Name ($ordre, "ENAME", $nom); OCIExecute ($ordre); // affiche les lignes tant qu'il y en a // et les colonnes une par une print "<TABLE BORDER=1> "; while (oci_fetch_array ($ordre)) { print "<TR> "; print "<TD> $no </TD>" ; print "<TD> $nom </TD>" ; print "</TR> "; } // libere les ressources oci_free_statement ($ordre); oci_close ($conn); ?>

http://didier.deleglise.free.fr/conferences/afup_2004/select2_new.txt [22/12/2004 17:09:03]

http://didier.deleglise.free.fr/conferences/afup_2004/maj_ldd_new.txt

<?php // maj_ldd.php5 // exemple d'ordre de mise a jour (update, insert, delete) // et d'ordre du LDD (create, drop, alter , truncate) // connexion (locale) $conn = oci_connect ("scott","tiger"); // preparation et execution des ordres // ordre de mise jour $sql1 = "INSERT INTO DEPT VALUES (50,'RH', 'Paris') "; $ordre = oci_parse ($conn, $sql1); oci_execute ($ordre, OCI_COMMIT_ON_SUCCESS); // on est en autocommit ici (mysql like) sinon...OCICommit ($conn); print "<BR>". oci_num_rows($ordre)." ligne(s) traites...<BR>"; // ordre du LDD $sql2 = "CREATE TABLE essai (n NUMBER)"; $ordre = oci_parse ($conn, $sql2); oci_execute ($ordre); print "<BR> Table cre."; // rem : les ordres du LDD sont auto COMMITs // liberation des ressources OCI_Free_Statement ($ordre); OCI_close ($conn); ?>

http://didier.deleglise.free.fr/conferences/afup_2004/maj_ldd_new.txt [22/12/2004 17:09:03]

http://didier.deleglise.free.fr/conferences/afup_2004/maj_parametree_new.txt

<?php // maj_parametree.php5 // exemple d'ordre de mise a jour (update, insert, delete) // avec parametre d'entree $no_employe=7369; // connexion (locale) $conn = oci_connect ("scott","tiger"); // preparation et execution des ordres // ordre de mise jour $sql1 = "DELETE FROM EMP WHERE empno = :no_emp"; $ordre = OCI_Parse ($conn, $sql1); OCI_Bind_By_Name ($ordre, ":no_emp", $no_employe, // ici on ne sera pas COMMIT... OCI_Execute ($ordre, OCI_DEFAULT); print "<BR>". OCI_Num_Rows ($ordre)." ligne(s) supprime(s)...<BR>"; // liberation des ressources OCI_Free_Statement ($ordre); OCI_close ($conn); ?> -1);

http://didier.deleglise.free.fr/conferences/afup_2004/maj_parametree_new.txt [22/12/2004 17:09:04]

http://didier.deleglise.free.fr/conferences/afup_2004/proc_stockee_new.txt

<?php // procedure_stockee.php5 // execution de fonction stockee dans la base // // On veut augmenter tous les salaires d'un taux // passe en parametre // Pour info, le code de creation de la procedure // dans la base est le suivant : // // CREATE OR REPLACE PROCEDURE augmentation // (taux IN NUMBER) // AS // BEGIN // UPDATE emp SET sal = sal * (1 + taux /100); // COMMIT; // END; // . // connexion (locale) $conn = oci_connect("scott","tiger"); // preparation // attention !! ne pas oublier les ';' $sql1 = "begin augmentation(:taux); end;"; $ordre = OCI_Parse ($conn, $sql1); // liaison des variables Oracle et PHP // -1 indique que c'est la longueur de $taux_saisi // qui est utilise pour le bind OCI_Bind_By_Name ($ordre, ":taux", $taux_saisi , -1); // execution OCI_Execute ($ordre); print "Nb de lignes traites : ".OCI_Num_Rows ($ordre); // liberation des ressources OCI_Free_Statement ($ordre); OCI_close ($conn); ?>

http://didier.deleglise.free.fr/conferences/afup_2004/proc_stockee_new.txt [22/12/2004 17:09:04]

Vous aimerez peut-être aussi