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

  FORUM HardWare.fr
  Programmation
  PHP

  tester une requete sql avant son execution

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tester une requete sql avant son execution

n°1799454
PierreC
Posté le 13-10-2008 à 15:35:40  profilanswer
 

Bonjour,
 
Contexte :  
  Dans le projet que je développe l'admin dans son back office peut ecrire une requete SELECT dans un textarea.
 
Problème :
  Avant l'execution de la requete je souhaiterai tester si elle va correctement s'excuter
 
Question :  
  Comment faire en php pour tester une requete avant son execution afin de savoir si elle n'a pas de probleme de syntaxe (sachant que son execution réel peut etre longue) ?
  j'ai pensé à faire un explain dessus, mais ce n'est pas l'objectif d'un explain.
 
 
Merci.


---------------
Du tofu en Alsace : www.tofuhong.com
mood
Publicité
Posté le 13-10-2008 à 15:35:40  profilanswer
 

n°1799487
kao98
...
Posté le 13-10-2008 à 16:12:22  profilanswer
 

Si je ne dit pas de bêtise, si la requête n'est pas bonne, alors son exécution ne sera pas longue. Tu récupèreras une erreur instantanément.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1799492
skeye
Posté le 13-10-2008 à 16:15:33  profilanswer
 

PierreC a écrit :

Bonjour,
 
Contexte :  
  Dans le projet que je développe l'admin dans son back office peut ecrire une requete SELECT dans un textarea.
 
Problème :
  Avant l'execution de la requete je souhaiterai tester si elle va correctement s'excuter
 
Question :  
  Comment faire en php pour tester une requete avant son execution afin de savoir si elle n'a pas de probleme de syntaxe (sachant que son execution réel peut etre longue) ?
  j'ai pensé à faire un explain dessus, mais ce n'est pas l'objectif d'un explain.
 
Merci.


 
pas de solution...s'il est assez grand pour faire ses requêtes, il est assez grand pour comprendre les messages d'erreur que tu lui fais remonter du sgbd...


---------------
Can't buy what I want because it's free -
n°1799494
PierreC
Posté le 13-10-2008 à 16:16:13  profilanswer
 

en effet lol,
Mais je ne souhaite pas l'executer.
Je souhaite juste savoir si elle s'executera correctement quand je le désirerai.
 

pas de solution...s'il est assez grand pour faire ses requêtes, il est assez grand pour comprendre les messages d'erreur que tu lui fais remonter du sgbd...


 
Bonne idée, je vais dire ca à mon client je suis sure qu'il va etre content :-)
Mais enfin, vous bossez dans le meme monde que moi ?
 
y'a toujours la solution du explain, mais ca me gene d'utiliser une fonction qui n'est pas vraiment prévu pour ca

Message cité 2 fois
Message édité par PierreC le 13-10-2008 à 16:18:34

---------------
Du tofu en Alsace : www.tofuhong.com
n°1799495
skeye
Posté le 13-10-2008 à 16:16:37  profilanswer
 

PierreC a écrit :

en effet lol,
Mais je ne souhaite pas l'executer.
Je souhaite juste savoir si elle s'executera correctement quand je le désirerai.


tu peux pas. C'est le sgbd qui sait ça. Et il ne le sait pas avant d'essayer.


---------------
Can't buy what I want because it's free -
n°1799500
kao98
...
Posté le 13-10-2008 à 16:20:56  profilanswer
 

PierreC a écrit :

en effet lol,
Mais je ne souhaite pas l'executer.
Je souhaite juste savoir si elle s'executera correctement quand je le désirerai.


Quel intérêt ?

 

Soit tu développe (ou trouve) une lib qui analyse la syntaxe de la requête et détermine si elle s'exécutera correctement ou non.

 

Ou bien tu envoies directement la requête telle quelle et le serveur l'exécutera directement si elle est valide, sinon te renverra un message d'erreur. Le tout demande une seule commande, une seule requête au serveur de BDD.
Soit tu envoies une première fois la requête au serveur pour analyse. Il te dit que la requête n'est pas bonne. Ok, ça t'as pris autant de temps que de tenter d'exécuter la requête, mais tu savais avant que ce serait pas bon. Soit Il te dit que la requête est correcte, tu l'envoies à nouveau pour exécution. Deuxième accès au serveur, pour faire quelque chose d'inutile ou presque. Côté optimisation, on a vu mieux quand même :/


Message édité par kao98 le 13-10-2008 à 16:21:46

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1799513
PierreC
Posté le 13-10-2008 à 16:31:55  profilanswer
 

Quel intérêt ?


 
Chaque requête met environ une minute à s'executer. L'admin souhaite en saisir 2 ou 3, valider leur syntaxe, puis lancer l'ensemble, allez prendre un café et revenir.
 


---------------
Du tofu en Alsace : www.tofuhong.com
n°1799515
kao98
...
Posté le 13-10-2008 à 16:33:32  profilanswer
 

Ok, je vois bien l'intérêt maintenant.

 

J'ai peur que ce soit difficile. Les requêtes sont dépendantes les unes des autres ?
C'est du mySql ?


Message édité par kao98 le 13-10-2008 à 16:35:21

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1799524
skeye
Posté le 13-10-2008 à 16:43:20  profilanswer
 

PierreC a écrit :

Quel intérêt ?


 
Chaque requête met environ une minute à s'executer. L'admin souhaite en saisir 2 ou 3, valider leur syntaxe, puis lancer l'ensemble, allez prendre un café et revenir.
 


 
tu peux toujours essayer un prepare() sans exec derrière, et voir si les erreurs de syntaxe remontent comme ça...


---------------
Can't buy what I want because it's free -
n°1799536
PierreC
Posté le 13-10-2008 à 16:53:20  profilanswer
 

merci pour vos réponses qui sont déjà un peu plus constructive :-)
 

prepare()


 
ca semble etre du mysqli seulement non ?  je suis encore en mysql
 
Bon j'ai finalement coder comme ma première intuition me le dictait avec un EXPLAIN : http://dev.mysql.com/doc/refman/5. [...] plain.html
 
cela donne un truc de ce genre :


$req="EXPLAIN SELECT count(*) FROM table1 WHERE champ= AND champ2='pierre' ";
$result=mysql_query($req);
if (!$result)  
{  
  echo "y'a un pb sur la requete";
}


 


---------------
Du tofu en Alsace : www.tofuhong.com
mood
Publicité
Posté le 13-10-2008 à 16:53:20  profilanswer
 

n°1799547
skeye
Posté le 13-10-2008 à 16:57:54  profilanswer
 

PierreC a écrit :


Bon j'ai finalement coder comme ma première intuition me le dictait avec un EXPLAIN : http://dev.mysql.com/doc/refman/5. [...] plain.html

 

C'est moche.:/

 

sinon oui le prepare c'est mysqli seulement...


Message édité par skeye le 13-10-2008 à 16:58:17

---------------
Can't buy what I want because it's free -
n°1799565
PierreC
Posté le 13-10-2008 à 17:09:41  profilanswer
 

C'est moche.


 
je sais, c'est pour ca que j'étais venue ici pour trouver mieux  ;)  
 


---------------
Du tofu en Alsace : www.tofuhong.com
n°1799574
skeye
Posté le 13-10-2008 à 17:17:05  profilanswer
 

PierreC a écrit :

C'est moche.


je sais, c'est pour ca que j'étais venue ici pour trouver mieux  ;)


bah une autre idée ce serait tout simplement de contrôler la syntaxe à la mimine pour essayer de déterminer si ça ressemble à une requête bien formée...mais ce sera jamais aussi précis/correct que ce que te répond le sgbd...


Message édité par skeye le 13-10-2008 à 17:17:15

---------------
Can't buy what I want because it's free -

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

  tester une requete sql avant son execution

 

Sujets relatifs
erreur de requete??MySQL server version for the right syntax to use neRequete POST
Requête sql sous delphiErreur execution access 2000
Problème d'execution de module perl[résolu]requete http en php, recuperer le code source d'une page web
[PHP] Requete sql avec virgulesRequete SQL avec GROUP BY probleme
Requête externe sur résultat de requête externe 
Plus de sujets relatifs à : tester une requete sql avant son execution


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