Oracle fonstions

Contenu du snippet

une petite expérience du php avec oracle

Source / Exemple :


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 !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.