[PHP][ORACLE] Problème de requête SQL

Problème de requête SQL [PHP][ORACLE] - PHP - Programmation

Marsh Posté le 30-05-2007 à 13:08:09    

Bonjour à tous.  
Je suis actuellement en stage et je dois programmer une application en php. Le but de cette application serait de mettre a jour une base de donnée oracle à l'aide de données contenues dans un fichier log.  
Pour me connecter à la base de donnée ORACLE j'utilise le driver ODBC.
Mon problème survient lorsque j'éxécute une requête d'insertion et une requête select count.  
 
Requête d'insertion  

Code :
  1. $dsn="mon_dsn";
  2. $lien=odbc_connect($dsn,"user","pass" );
  3. $sql = "INSERT INTO TRACE (id, utilisateur, date_action, action, client, message) VALUES ($id, '".$user."', '".$date."', '".$type."','".$client."','".$msg."')";
  4. $result = odbc_result($lien,$sql);
  5. odbc_exec($result);


 
L'erreur retournée est la suivante :  

Citation :


Warning: odbc_result(): supplied resource is not a valid ODBC result resource in c:\...  
Warning: Wrong parameter count for odbc_exec() in c:\...  


Les variables dans la requête peuvent contenir des apostrophes j'ai donc ajouter des addslashes à ces variables, mais le problème persiste.  
Exemple:

Code :
  1. INSERT INTO TRACE (id, utilisateur, date_action, action, client, message) VALUES (1, 'USER', '2007-05-29', 'action','1520','L\'utilisateur USER etc...')


 
Requête select count:

Code :
  1. $sql = "SELECT count(*) FROM TRACE";
  2. $result = odbc_exec($lien,$sql);


Pour la requête select count le message d'erreur est le suivant :  

Citation :


Warning: odbc_exec(): SQL error: [Microsoft][ODBC driver for Oracle]Impossible d'utiliser le curseur de table de caractères sur join, avec une clause distincte union, intersection ou moins ou sur une série de résultats en lecture seule, SQL state S1C00 in SQLExecDirect in c:\...  
 
Warning: odbc_result(): supplied argument is not a valid ODBC result resource in c:\...


 
Merci ;)
 
Config :  
Windows 2000 Pro
Internet Explorer 6
EasyPHP 1.8
Oracle 9.2 Client / Server

Message cité 1 fois
Message édité par b3ck le 30-05-2007 à 15:16:12
Reply

Marsh Posté le 30-05-2007 à 13:08:09   

Reply

Marsh Posté le 30-05-2007 à 17:21:36    

b3ck a écrit :

Code :
  1. $result = odbc_result($lien,$sql);
  2. odbc_exec($result);


dans le bon ordre ça serait mieux
 

b3ck a écrit :

Warning: odbc_exec(): SQL error: [Microsoft][ODBC driver for Oracle]Impossible d'utiliser le curseur de table de caractères sur join, avec une clause distincte union, intersection ou moins ou sur une série de résultats en lecture seule, SQL state S1C00 in SQLExecDirect in c:\...

bizarre, tu as testé avec le driver oracle sinon ?

Reply

Marsh Posté le 30-05-2007 à 18:26:15    

Non j'ai pas testé le driver oracle (je sais pas comment ça s'instal :s)
Mais je trouve ça bizarre car les requêtes de types select toutes simples fonctionne parfaitement...

Reply

Marsh Posté le 31-05-2007 à 11:59:16    

J'ai un nouveau soucis sur ma requête d'insertion ...
Voici le message d'erreur :

Citation :


Warning: odbc_exec(): SQL error: [Microsoft][ODBC driver for Oracle][Oracle]ORA-00917: Virgule absente, SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-8\www\test\mise_a_jour_bdd.php on line 173
 
Warning: Wrong parameter count for odbc_result() in c:\program files\easyphp1-8\www\test\mise_a_jour_bdd.php on line 175


 
Le problème vien du fais que dans ma requête sql la variable $msg peut contenir des apostrophes :s. j'ai beau avoir mis des addslashes il considère la fin de la chaîne des la première apostrophe de ma chaîne
exemple :  

Code :
  1. INSERT INTO TRACE (id, utilisateur, date_action, action, client, message) VALUES (1 , 'USER' , '2007-05-30' , 'Action' , 'test' , 'L\'utilisateur USER etc etc ...')


 
Quelqu'un aurait une idée de comment faire ? :)
Merci à tous :)

Reply

Marsh Posté le 31-05-2007 à 13:56:00    

avec oracle il faut doubler les quotes
 
pour le driver odbc oracle : http://www.oracle.com/technology/s [...] index.html

Reply

Marsh Posté le 31-05-2007 à 14:17:41    

il existe une fonction spécifique à oracle pour doubler les quotes ? car le messages et dans une variables donc je ne peut pas les mettres manuellements :)
 
Merci pour ta réponse en tout cas soju ;)

Reply

Marsh Posté le 31-05-2007 à 14:27:12    

je ne sais pas comment ca s'appelle en php mais regarde du coté des requetes paramétrisées, ou prepared statement en java, avec ca tu ne dois pas t'amuser a connaitre le format date en cours ou doubler tripler tes quotes.
c'est bien plus simple et plus safe

Reply

Marsh Posté le 31-05-2007 à 14:32:36    

casimimir a écrit :

je ne sais pas comment ca s'appelle en php

http://fr.php.net/pdo

Reply

Marsh Posté le 31-05-2007 à 14:43:06    

Les fonctions pdo m'ont l'air interessante mais le soucis c'est que j'utilise php4.x et je pense que je n'aurai pas le temps de tout refaire mon appli (il me reste 2 semaines de stages :) ). merci pour l'info en tout cas ;) ça pourra me servir pour plus tard.  
Je vais aller fouiller dans la doc de php pour voir si je trouve une fonction pour doubler les quotes ^^ (si vous la connaissez faîte moi signe :))

Reply

Marsh Posté le 31-05-2007 à 14:48:39    

b3ck a écrit :

Je vais aller fouiller dans la doc de php pour voir si je trouve une fonction pour doubler les quotes ^^ (si vous la connaissez faîte moi signe :))

un str_replace devrait suffire

Reply

Marsh Posté le 31-05-2007 à 14:48:39   

Reply

Marsh Posté le 31-05-2007 à 15:05:00    

Merci soju ;) ça marche ce coup ci :) me reste un petit message d'erreur que je sais pas d'où ça vient mais je vais trouver ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed