tester une requete sql avant son execution

tester une requete sql avant son execution - PHP - Programmation

Marsh Posté le 13-10-2008 à 15:35:40    

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
Reply

Marsh Posté le 13-10-2008 à 15:35:40   

Reply

Marsh Posté le 13-10-2008 à 16:12:22    

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
Reply

Marsh Posté le 13-10-2008 à 16:15:33    

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

Marsh Posté le 13-10-2008 à 16:16:13    

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
Reply

Marsh Posté le 13-10-2008 à 16:16:37    

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

Marsh Posté le 13-10-2008 à 16:20:56    

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
Reply

Marsh Posté le 13-10-2008 à 16:31:55    

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
Reply

Marsh Posté le 13-10-2008 à 16:33:32    

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
Reply

Marsh Posté le 13-10-2008 à 16:43:20    

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

Marsh Posté le 13-10-2008 à 16:53:20    

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
Reply

Marsh Posté le 13-10-2008 à 16:53:20   

Reply

Marsh Posté le 13-10-2008 à 16:57:54    

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

Marsh Posté le 13-10-2008 à 17:09:41    

C'est moche.


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


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 13-10-2008 à 17:17:05    

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

Sujets relatifs:

Leave a Replay

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