Bonjour à tous,
Je suis en train de créer une expression régulière permettant de me découper une requête de sélection simple (pas de requêtes imbriquées). J'ai fait quelques recherches (tuto, forum) et je reste bloqué...
Le but est couper la requête en plusieurs morceaux :
- SELECT et les champs sélectionnée
- FROM et les tables sélectionnées
- ORDER BY et les champs
Voici le code utilisé
Le souci c'est la gestion du "ORDER BY" qui peut ne pas être présent dans la requête. Si jamais il y a un "ORDER BY" celui-ci n'est pas écrit dans le tableau dans des champs différents (présent dans le même champ que le FROM). Si le ORDER BY n'est pas présent, l'expression régulière n'est pas bonne... Je ne sais donc pas trop quoi faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 //Requête à traiter $sql = "SELECT user_id, user_name FROM user ORDER BY "; $tab =preg_match('/^.*(SELECT){1,1}(.*)(\nFROM| FROM){0,1}(.*)(\nORDER BY| ORDER BY){0,1}(.*)/i',$sql,$resultat); // /^.* Sélection des caractères avant le select (permet de supprimer les blancs) //(SELECT){1,1}(.*) Récupération du SELECT et des champs sélectionés //(\nFROM| FROM){1,1}(.*) Sélection du FROM et des tables appelées (le FROM peut être séparé soit par un espace soit par un retour chariot) //(\nORDER BY| ORDER BY){0,1}(.*) Sélection du ORDER BY et des champs d'ordre (le ORDER BY peut ne pas être présent et peut être séparé soit par un espace soit par un retour chariot) // /i (la casse n'est pas importante)
N'hésitez pas à me faire par de vos remarques quant à l'expression régulière en elle-même.
Merci d'avance
Partager