begin process at 2012 05 27 19:32:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > ORACLE FONSTIONS

ORACLE FONSTIONS


 Information sur la source

 Description

une petite expérience du php avec oracle

Source

  • bonjour, j'ai passé donc un séminaire oracle, il m'était obligé de faire une interface d'utilisateur avec une base de données oracle derrière.
  • J'ai trouvé très intéressant, et je voudrais partager le code avec vous
  • // commencement
  • pour se connecter à la base de données oracle, il existe une fonction ocilogon(). Cette fonction est similaire à lafonction mysql_connect() sous mysql. Sauf que vous n'avez pas besoin de faire un mysql_select_db() après. En voici un exemple:
  • $db_name="nom de la base de données";
  • $db_pass="le mot de passe de la base";
  • $connexion=ocilogon($db_name,$db_pass);
  • // en mysql normalement on fait :
  • //$connexion = mysql_connect($db_name,$db_pass) or die ('affiche quelque chose');
  • Après être connecté, nous avons besoins souvent de faire des requête sur la base de données (d'où l'intérêt d'utiliser une base de données ;-) )
  • Donc une requete sous oracle est passée de manière suivante:
  • pour les requêtes simple qui ne contiennent pas de variables php
  • $requete = "select * from [nom de la table]";
  • $result=ociparse($connexion,$requete); // vérification de la requête
  • ociexecute($result); // si la vérification est passée alors on l'exécute
  • pour l'affichage de résultats :
  • while(ocifetch($result))
  • {
  • echo ociresult($result,"[le nom du champ que tu veut afficher en MAJUSCULE]");
  • }
  • C'est un peu différent par rapport à mysql non?
  • Ensuite, si tu veux récupérer le nombre de ligne de résultat, il existe la fonction ocirowcount() pour oracle comme la fonction mysq_num_rows() en sql mais cette fonction ne peut pas être utilisé directement après l'exécution de la requête tu dois soit faire de manière suivante:
  • $compteur = 0;
  • while(ocifetch($result))
  • {
  • $compteur++;
  • echo ociresult($result,"[le nom du champ que tu veut afficher en MAJUSCULE]");
  • }
  • echo $compteur;
  • Mais comme on est malin, on utilisera une autre fonction pour récupérer le nombre de résulat de la requête. Nous nous recourrons alors à la fonction ocifetchstatement(). Cette fonction comme son nom indique renvoie le résultat de la requête dans un tableau, et on peut dès lors manipuler plus facilement avec les résultats.
  • Code:
  • // connexion + la requête...
  • ociexecute($result);
  • ocifetchstatement($result,$tab_resultat);
  • // seulement maintenant que l'on peut récupérer le nombre de ligne du résulat avec la fonction ocirowcount()
  • echo ocirowcount($result);
  • Je suis sur et certain que si à la première fois que vous utiliser un serveur Oracle, pour constituer des requête vous allez faire du genre:
  • $requete ="select nom_client from order where no_client ='".$no_client."'"; dont la variable $no_client est une variable de PHP.
  • $result = ociparse($connexion,$requete);
  • Et CA NE MARCHE PAS COMME CA sous Oracle. ;~(.
  • En fait nous devons passer à une ou plusieurs étape pour éxécuter la requête selon le nombre de variables. Et pour référencer les varible php dans la requête passée sous oracle, il faut utiliser la fonction ocibindbyname() pour convertir en quelque sorte les variable sous php en oracle. Comme quand vous faites du sql sous c++, entre variables hotes et variables locales.
  • Exple:
  • // on souhaite récupérer le nom du client qui a le numéro du client = 2
  • $num_client = 2;
  • $requete =" select nom_client from client where no_client=:numclient"; //
  • $result = ociparse($connexion,$requete) ; // vous vérifions si le script
  • // avant d'envoyer le script au serveur pour l'exécuter nous devons affecter la valeur de php à celle de la requete
  • ocibindbyname($result,':numclient',&$no_client,-1); // nous référencons la valeur de la variable $no_client à celle de :numclient
  • // la signe & ici c'est pour envoyer la variable $no_client par référence dans la fonction ocibinbyname(), et la valeur de numclient sera affectée par la valeur de cette variable
  • tu va demander peut-être à quoi sert le '-1', en fait dans ce champ tu dois préciser la longeur de la variables que tu souhaite passer en paramètre, quant il est à -1 ca veut dire que tu prends la longueur par défaut de la variable. pour avoir plus de détails voici le lien:http://fr.php.net/manual/en/function.ocibindbyname.php.
  • // et maintenant nous pouvons exécuter la requete normalement avec la fonction ociexecute()
  • ociexecute($result); // et là ça va marcher !
  • Pour l'insertion des valeur dans les tables d'une base de données sous oracle est faite de la même manière.
  • Par exemple, si tu a une table qui se nome Client(no_client, nom_client, prenom_client), et que tu veux insérer une ligne. l'insertion est faite de façon suivante:
  • $no_client=3;
  • $nom_client="son";
  • $prenom_client="tung";
  • $requete = "insert into Client(no_client, nom_client, prenom_client) values (:numclient, :nomclient,:prenomclient)";
  • $insert = ociparse($connexion, $requete);
  • ocibindbyname($insert,':numclient',&$no_client,-1); // affecter la valeur de la $no_client à :numclient
  • ocibindbyname($insert,':nomclient',&$nom_client,-1);
  • ocibindbyname($insert,':prenomclient',&$prenom_client,-1);
  • // après que les variables ont été affectée, nous allons maintenant exécuter la requete
  • ociexecute($insert);
  • echo "insertion terminée!";
  • Voilà. Avec toutes ces connaissances vous pourvez désormais commencer à faire des trucs avec la base de données sous oracle.
  • J'espère avoir vos remarques sur ce petit tuto sur sontung2603@yahoo.com
  • Chao !
bonjour, j'ai passé donc un séminaire oracle, il m'était obligé de faire une interface d'utilisateur avec une base de données oracle derrière.

J'ai trouvé très intéressant, et je voudrais partager le code avec vous

// commencement

pour se connecter à la base de données oracle, il existe une fonction ocilogon(). Cette fonction est similaire à lafonction mysql_connect() sous mysql. Sauf que vous n'avez pas besoin de faire un mysql_select_db() après. En voici un exemple:

$db_name="nom de la base de données";            
$db_pass="le mot de passe de la base";
$connexion=ocilogon($db_name,$db_pass);                
// en mysql normalement on fait : 
//$connexion = mysql_connect($db_name,$db_pass) or die ('affiche quelque chose');

Après être connecté, nous avons besoins souvent de faire des requête sur la base de données (d'où l'intérêt d'utiliser une base de données ;-) )
Donc une requete sous oracle est passée de manière suivante:

pour les requêtes simple qui ne contiennent pas de variables php

$requete = "select * from [nom de la table]";
$result=ociparse($connexion,$requete); // vérification de la requête
ociexecute($result);  // si la vérification est passée alors on l'exécute

pour l'affichage de résultats :

while(ocifetch($result))
{
   echo ociresult($result,"[le nom du champ que tu veut afficher en MAJUSCULE]");
}

C'est un peu différent par rapport à mysql non?
Ensuite, si tu veux récupérer le nombre de ligne de résultat, il existe la fonction ocirowcount() pour oracle comme la fonction mysq_num_rows() en sql mais cette fonction ne peut pas être utilisé directement après l'exécution de la requête tu dois soit faire de manière suivante:

$compteur = 0;
while(ocifetch($result))
{ 
   $compteur++;
   echo ociresult($result,"[le nom du champ que tu veut afficher en MAJUSCULE]");
}
echo $compteur;

Mais comme on est malin, on utilisera une autre fonction pour récupérer le nombre de résulat de la requête. Nous nous recourrons alors à la fonction ocifetchstatement(). Cette fonction comme son nom indique renvoie le résultat de la requête dans un tableau, et on peut dès lors manipuler plus facilement avec les résultats.
Code:
// connexion + la requête...
ociexecute($result);
ocifetchstatement($result,$tab_resultat);
// seulement maintenant que l'on peut récupérer le nombre de ligne du résulat avec la fonction ocirowcount()
echo ocirowcount($result);

Je suis sur et certain que si à la première fois que vous utiliser un serveur Oracle, pour constituer des requête vous allez faire du genre:
$requete ="select nom_client from order where no_client ='".$no_client."'"; dont la variable $no_client est une variable de PHP.
$result = ociparse($connexion,$requete);

Et CA NE MARCHE PAS COMME CA sous Oracle. ;~(.
En fait nous devons passer à une ou plusieurs étape pour éxécuter la requête selon le nombre de variables. Et pour référencer les varible php dans la requête passée sous oracle, il faut utiliser la fonction ocibindbyname() pour convertir en quelque sorte les variable sous php en oracle. Comme quand vous faites du sql sous c++, entre variables hotes et variables locales.
Exple:

// on souhaite récupérer le nom du client qui a le numéro du client = 2
$num_client = 2;
$requete =" select nom_client from client where no_client=:numclient"; // 
$result = ociparse($connexion,$requete) ; // vous vérifions si le script
// avant d'envoyer le script au serveur pour l'exécuter nous devons affecter la valeur de php à celle de la requete
ocibindbyname($result,':numclient',&$no_client,-1); // nous référencons la valeur de la variable $no_client à celle de :numclient
// la signe & ici c'est pour envoyer la variable $no_client par référence dans la fonction ocibinbyname(), et la valeur de numclient sera affectée par la valeur de cette variable

tu va demander peut-être à quoi sert le '-1', en fait dans ce champ tu dois préciser la longeur de la variables que tu souhaite passer en paramètre, quant il est à -1 ca veut dire que tu prends la longueur par défaut de la variable. pour avoir plus de détails voici le lien:http://fr.php.net/manual/en/function.ocibindbyname.php.

// et maintenant nous pouvons exécuter la requete normalement avec la fonction ociexecute()
ociexecute($result);    // et là ça va marcher !

Pour l'insertion des valeur dans les tables d'une base de données sous oracle est faite de la même manière.
Par exemple, si tu a une table qui se nome Client(no_client, nom_client, prenom_client), et que tu veux insérer une ligne. l'insertion est faite de façon suivante:

$no_client=3;
$nom_client="son";
$prenom_client="tung";
$requete = "insert into Client(no_client, nom_client, prenom_client) values (:numclient, :nomclient,:prenomclient)";
$insert = ociparse($connexion, $requete);
ocibindbyname($insert,':numclient',&$no_client,-1); // affecter la valeur de la $no_client à :numclient
ocibindbyname($insert,':nomclient',&$nom_client,-1);
ocibindbyname($insert,':prenomclient',&$prenom_client,-1);
// après que les variables ont été affectée, nous allons maintenant exécuter la requete
ociexecute($insert);
echo "insertion terminée!";

Voilà. Avec toutes ces connaissances vous pourvez désormais commencer à faire des trucs avec la base de données sous oracle.
J'espère avoir vos remarques sur ce petit tuto sur sontung2603@yahoo.com

Chao ! 






 






 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
SYSTÈME DE PAGINATION AVEC BDD ET IMAGES (FICHIERS) par begueradj
Source avec Zip PORTAGE PDO DE MES ANCIENNES PUBLICATIONS par 8Tnerolf8
Source avec Zip EXPORTATION DE BASES ORACLE par bmwalido
Source avec Zip ANNUAIRE TÉLEPHONIQUE ORACLE par bmwalido

Commentaires et avis

Commentaire de malalam le 17/02/2006 14:52:43 administrateur CS

Hello,

ce que j'apprécierais, c'est que tu mettes ceci dans les tutoriaux (2ème onglet, après celui des codes sources).
Il n'a pas sa place ici.
Et ce serait intéressant, car ce serait, il me semble, le 1er tuto Oracle/php :-)
Donc si tu veux bien le poster dans les tutos, je me charge d'effacer celui-ci.

Commentaire de titerm le 20/02/2006 08:53:24

[quote]
# Je suis sur et certain que si à la première fois que vous utiliser un serveur Oracle, pour constituer des requête vous allez faire du genre:
# $requete ="select nom_client from order where no_client ='".$no_client."'"; dont la variable $no_client est une variable de PHP.
# $result = ociparse($connexion,$requete);
#  
# Et CA NE MARCHE PAS COMME CA sous Oracle. ;~(.
[/quote]

Faux, cela peux marcher aussi comme cela sous oracle. Le bind de variable est à utiliser dans le cas ou une requete sera utilisée plusieurs fois pour éviter de faire des ociparse couteux, mais dans la majeur partie des cas, les requetes sont unitaire et le bind n'a aucune utilité.
Par ailleurs, le -1 pour la taille de la variable par défaut en fonction des versions de la couche OCI est plutot hasardeux...

Commentaire de bochu le 20/02/2006 12:54:45

Merci pour tes remarques TITERM,
J'avais testé en mettant direct la variable php dans une requête oracle mais ca n'avait pas marché. Je sais pas comment tu fais pour faire fonctionner la requête sous oracle en mettant les variables php sans passer par ocibindbyname(), peut-être que j'ai oublié de configurer quelque chose, peux-tu m'en expliquer d'avantage?

Merci beaucoup par avance !  

Commentaire de titerm le 20/02/2006 13:47:52

Et bien le plus simplement du monde, dailleurs ton exemple est correcte et devrait fonctionner, il ne faut pas oublié que les champs oracle sont typés...

$requete ="select nom_client from order where no_client ='".$no_client."'";

soit une fois parsé par php
$requete ="select nom_client from order where no_client ='$no_client'"; avec $no_client remplacé par un numéro
les quotes sont inutiles dans le cas d'un number (oracle vas convertir inutilement) , obligatoires dans le cas d'un varchar2.

Si dans ta clause where tu dois saisir une quote, il faut la doubler.
$req = "select nom_client from order where nom_client like 'mac''%'";
le % est le meta pour n'importe quelle chaine... ici cela sortira tous les mac'arthur, mac'obrian, etc ....

Il n'y a donc aucune raison que cela ne fonctionne pas...
Si tu met des variable php, au sein d'une chaine, n'oublie pas d'utiliser des " et non des ' si tu veux qu'elle soit interprété avant d'être envoyé a oracle, mais dans ton exemple, tu fais de la concaténation et donc ce n'est pas cela ton problème.

Commentaire de titerm le 20/02/2006 13:50:38

Je te conseil un petit outil bien pratique pour valider tes requetes de facon indépendante de php...
http://www.sqltools.net/

Commentaire de clamou le 16/05/2009 08:18:04

merci beaucou amigo

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Connexion à Oracle 9i avec du php ? [ par ibti25 ] Bonjour a tous,Voila je ne sais pas comment me connecter à une base d'Oracle 9i avec du php sachant qu'avt j'avais pas de pbs avec oracle 8. J'utilisa Php & MySql ??? [ par nova85 ] Je voudrai savoir si il est possible de realiser un site assez important juste avec une BDD mysql , si c'est capable de resister , et surtout savoir s php et oracle ? [ par Xime ] salut :)voila je vais attaquer une base oracle alors j'aimerais savoir les outils a utiliser et autres...ou des adresses de sites avec tutoriaux serai ORACLE&PHP [ par terminaboul ] Bonjour,Je suis a la recherche d'un site ou d'une doc en français bien évidament pouvant m'aider sur les problèmes que je rencontre avec ma base ORACL ORACLE&PHP [ par terminaboul ] Bonjour,Je suis a la recherche d'un site ou d'une doc en français bien évidament pouvant m'aider sur les problèmes que je rencontre avec ma base ORACL php et oracle 9 [ par nat ] Bonjour,je voudrais savoir si les fonction d'oracle sous php destinées à oracle 8 sont les même pour utiliser oracle 9.merci d'avance probleme avec mes fonctions [ par ludlu ] j'ai une fonction qui ne s'execute pas! si qq peut m'aider.voici le code source:<?phpfunction verif_session(){session_start();if(!session_is_regist pb connection oracle PHP [ par boucledor ] salut,j'ai un peit problème pour me connecter à une base oracle distante en php.je ne peu modifier le php.ini, donc je dois me resoudre à faire celà v php et hyperfile, est-ce possible? [ par adeath ] En premier lieu bonjour et merci à ceux qui lirons ce message.Je voudrais développer un site internet en exploitant une BDD hyperfile.>Est-il possi connection base Oracle [ par thorod ] Bonjour à tous,Bien voila, je cherche depuis un certain temps et je trouve pas de solution.J'ai un serveur IIS, avec oracle Net 8 installé. L'extensio


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales