Tester la syntaxe d'une requête SQL ?

Eléphant du PHP | 92 Messages

12 oct. 2008, 18:09

Bonjour,
Existe-t-il une fonction PHP permettant de définir si une chaîne passée en paramètre est une requête SQL (de préférence sans l'exécuter, juste par analyse syntaxique) ?

Le but serait de créer une classe qui recevrait un paramètre :
- si c'est une requête SQL : on l'exécute
- sinon : on considère que c'est un nom de table et on exécute une requête type sur cette table

ViPHP
ViPHP | 2287 Messages

12 oct. 2008, 18:48

Non, ça n'existe pas. C'est assez spécifique comme besoin :-)

Mais ça paraît assez simple à réaliser, il suffit de déterminer si la chaîne passée en paramètre commence par certains mots-clé du langage SQL (select, insert, update, delete, create...).

Tu peux nous en dire un peu plus sur cette classe et son utilité ?
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 92 Messages

12 oct. 2008, 19:04

Mais ça paraît assez simple à réaliser, il suffit de déterminer si la chaîne passée en paramètre commence par certains mots-clé du langage SQL (select, insert, update, delete, create...).
Une table ne peut pas avoir un nom qui commence par ces mots-clés ?

Au début, je pensais tester s'il y avait des espaces dans la chaîne passée en paramètre puis je me suis aperçu qu'une table pouvait avoir une espace dans son nom.

Pour le moment j'ai fait une fonction qui exécute la requête et j'analyse le code de retour d'erreur : s'il y a erreur de syntaxe, je considère que c'est une nom de table et pas une requête, mais ce n'est pas très fiable comme méthode.
Tu peux nous en dire un peu plus sur cette classe et son utilité ?
Le but est de créer une classe qui me permet de manipuler facilement des tables SQL (affichage d'un élément, ajout, suppression, etc.) pour simplifier mon code globalement.
En fait, j'ai déjà une classe et j'essaie de l'améliorer (pour pouvoir manipuler des jointures plutôt qu'une seule table, notamment).

Mammouth du PHP | 1668 Messages

12 oct. 2008, 20:13

Le but est de créer une classe qui me permet de manipuler facilement des tables SQL (affichage d'un élément, ajout, suppression, etc.) pour simplifier mon code globalement.
Pour ça, PDOéxiste, pour l'analyse syntaxique, bah, si tu à un problème lorsque les noms de tables comporte des espaces, fait des noms sans espaces :lol:

Blagues à part, on pourrait faire un analyzeur syntaxique SQL, mais il aurrait des bugs, il y a des différences dans les syntaxes SQL en fonction des BDD, donc... :roll:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol