Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1971 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1567191
b3ck
Posté le 30-05-2007 à 13:08:09  profilanswer
 

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
mood
Publicité
Posté le 30-05-2007 à 13:08:09  profilanswer
 

n°1567417
soju
One shot !
Posté le 30-05-2007 à 17:21:36  profilanswer
 

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 ?

n°1567452
b3ck
Posté le 30-05-2007 à 18:26:15  profilanswer
 

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...

n°1567774
b3ck
Posté le 31-05-2007 à 11:59:16  profilanswer
 

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 :)

n°1567900
soju
One shot !
Posté le 31-05-2007 à 13:56:00  profilanswer
 

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

n°1567928
b3ck
Posté le 31-05-2007 à 14:17:41  profilanswer
 

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 ;)

n°1567937
casimimir
Posté le 31-05-2007 à 14:27:12  profilanswer
 

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

n°1567942
soju
One shot !
Posté le 31-05-2007 à 14:32:36  profilanswer
 

casimimir a écrit :

je ne sais pas comment ca s'appelle en php

http://fr.php.net/pdo

n°1567968
b3ck
Posté le 31-05-2007 à 14:43:06  profilanswer
 

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 :))

n°1567978
soju
One shot !
Posté le 31-05-2007 à 14:48:39  profilanswer
 

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

mood
Publicité
Posté le 31-05-2007 à 14:48:39  profilanswer
 

n°1568007
b3ck
Posté le 31-05-2007 à 15:05:00  profilanswer
 

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 ^^


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[RESOLU] FPDF probleme mise en page tableauProblème de compilo en ligne de commande : run-time error R6009
probleme enregistrement[GLSL-OSG] probleme avec les shaders GLSL sous osg
problème avec flash et Internet explorer [RESOLU]trouver COUNT avec requete UNION ou INTERSECT
probleme: ajouter une valeur taper dans un formulaire dans une tableProblème de connection à site web
[Résolu] problème avec Switch et MySQLProblème de requetes imbriquées
Plus de sujets relatifs à : [PHP][ORACLE] Problème de requête SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR