Bonjour à tous!
Bon voilà, je m'efforce depuis quelques temps de réaliser un framework php francophone et là j'en suis à la partie "bases de données". Dans cet objectif, je dois donc vérifier l'exactitude du format des requêtes SQL fournies à différentes fonctions pour qu'elles soient acceptées par un serveur MySQL.
En gros je dois vérifier que les requêtes sont bien des types UPDATE, SELECT, INSERT et DELETE. Chacun de ces types devant être vérifié par une expression régulière différente (encore heureux ).
Donc j'ai fait un premier gros travail, mais n'étant pas non plus un génie du SQL, je ne suis pas sûr de moi. Qu'est-ce-que vous pensez donc des expressions régulières suivantes? Trucs oubliés, erronés?
UPDATE :
#^UPDATE [a-z0-9_- &]{1,} SET ([a-z0-9_- &]{1,}=(.){1,})(,[ ]?[a-z0-9_- &]{1,}=(.){1,}){0,}( WHERE [a-z0-9_- &]{1,}[=|!=|>|=>|<|<=|LIKE|NOT LIKE|REGEXP|NOT REGEXP|IN|NOT IN|JOIN|RIGHT JOIN|LEFT JOIN|INNER JOIN](.){1,}( [AND|OR|XOR] [a-z0-9_- &]{1,}[=|!=|>|=>|<|<=|LIKE|NOT LIKE|REGEXP|NOT REGEXP|IN|NOT IN|JOIN|RIGHT JOIN|LEFT JOIN|INNER JOIN](.){1,}){0,}){0,1}( LIMIT [0-9]{0,},( ){0,1}[0-9]{0,}){0,1};$#i
INSERT :
#^INSERT INTO [a-z0-9_- &]{1,}(\([a-z0-9_- &]{1,}(, [a-z0-9_-&]){0,}\)){0,1} VALUES \(.{0,}\)(, \(.{0,}\)){0,};$#i
SELECT :
#^SELECT [a-z0-9_- &|*]{1,} FROM [a-z0-9_- &](, [a-z0-9_- &]){0,}( WHERE [a-z0-9_- &]{1,}[=|!=|>|=>|<|<=|LIKE|NOT LIKE|REGEXP|NOT REGEXP|IN|NOT IN|JOIN|RIGHT JOIN|LEFT JOIN|INNER JOIN](.){1,}( [AND|OR|XOR] [a-z0-9_- &]{1,}[=|!=|>|=>|<|<=|LIKE|NOT LIKE|REGEXP|NOT REGEXP|IN|NOT IN|JOIN|RIGHT JOIN|LEFT JOIN|INNER JOIN](.){1,}){0,}){0,1}( GROUP BY [a-z0-9_- &](, [a-z0-9_- &]){0,1}){0,1}( ORDER BY [a-z0-9_- &] [ASC|DESC](, [a-z0-9_- &] [ASC|DESC]){0,1}){0,1}( LIMIT [0-9]{0,},( ){0,1}[0-9]{0,}){0,1};$#i
DELETE :
#DELETE FROM [a-z0-9_- &]{1,}( WHERE [a-z0-9_- &]{1,}[=|!=|>|=>|<|<=|LIKE|NOT LIKE|REGEXP|NOT REGEXP|IN|NOT IN|JOIN|RIGHT JOIN|LEFT JOIN|INNER JOIN](.){1,}( [AND|OR|XOR] [a-z0-9_- &]{1,}[=|!=|>|=>|<|<=|LIKE|NOT LIKE|REGEXP|NOT REGEXP|IN|NOT IN|JOIN|RIGHT JOIN|LEFT JOIN|INNER JOIN](.){1,}){0,}){0,1}( LIMIT [0-9]{0,},( ){0,1}[0-9]{0,}){0,1};$#i
Me dites pas que c'est tout bon, sinon je file fêter ça.
Merci d'avance et bonnes fêtes de fin d'année à tous!
Partager