IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Expressions régulières vérifiant la validité de requêtes MySQL


Sujet :

Langages de programmation

  1. #1
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut Expressions régulières vérifiant la validité de requêtes MySQL
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #^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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #^INSERT INTO [a-z0-9_- &]{1,}(\([a-z0-9_- &]{1,}(, [a-z0-9_-&]){0,}\)){0,1} VALUES \(.{0,}\)(, \(.{0,}\)){0,};$#i
    SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #^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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #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!

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    je pense que tu ne comprends pas bien la complexité potentielle des requêtes SQL... les expressions régulières ne suffiront pas a priori

    il te faudra certainement faire un parseur

  3. #3
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    J'ai encore travaillé dessus. Et effectivement. Je crois que je n'arriverai pas à tout faire tenir dans des expressions régulières...

    Je vais essayer avec un modèle bien plus léger qui sera bon quand même mais plus permissif. Je verrai quels en seront les retours, si c'est pas assez bon, je ferai un parser pour une nouvelle version de la classe.

    Merci quand même

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Il y a bcp simple : tu fais un EXPLAIN sur la requête, ça te dira tout de suite s'il y a une erreur de syntaxe ou non.

    NB : merci de ne pas délester avant réponse de gwinyam.

  5. #5
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Vous pouvez délester, désolé j'ai zappé de répondre.

    En fait, j'ai laissé tomber l'idée, j'ai pas les capacités pour un tel projet, ni le temps d'ailleurs.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Tu peux le faire en moins de 5 minutes, en oubliant les regex et en utilisant un EXPLAIN.

  7. #7
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Tu peux le faire en moins de 5 minutes, en oubliant les regex et en utilisant un EXPLAIN.


    pas sûr que EXPLAIN réponde forcemment aux besoins... certes ça lui dira si la syntaxe est correcte, mais quid de toutes les autres vérifications qu'il pourrait vouloir faire

    SQL étant un langage de programmation comme un autre, la technique des analyseurs syntaxiques est selon moi plus adaptée (et pas forcemment plus lourde )

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/06/2009, 12h12
  2. Réponses: 2
    Dernier message: 08/05/2008, 21h41
  3. Réponses: 6
    Dernier message: 30/01/2008, 23h20
  4. Réponses: 6
    Dernier message: 15/12/2007, 00h26
  5. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 20h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo