|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Inscription : août 2005 Messages : 361 ![]() |
bonjour je cherche a extraire le nom d'une table d'un string sql.
pour le moment je pratique ainsi: Code :
j'en profite pour essayer de mettre une expression reguliere mais je cale completement... entre le regex le posix.. je patauge quel est le nom de la fonction qui me retournerai le nom de la table? (si je lui donne le bon pattern) merci
__________________
Le but de tout developpeur OO est de devenir une référence. Mon avatar est un ambigramme, les curieux peuvent le retourner ;-) Aider <> Faire a la place de!!! |
||
|
|
00
|
|
|
#2 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
Si tu cherches un truc vraiment béton, tu vas te prendre la tête, je te le promets... Voici une piste : Code :
/(?:SELECT|UPDATE|INSERT)[[:space:]](?:FROM|INTO)?([[:space:]])?`?([^` ]+)`?/i
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Code :
preg_match(/^.*(FROM|INTO)\s+(\w)+/,$SQL,$resultat) Si ca marche pas, donne moi un exemple de requete SQL que tu peux avoir et je te dirai ou le regexp merde.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
00
|
|
|
#4 | ||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
maxoo : Ton expression semble passer mais il mettre le + dans la parenthèse.
Code :
Parcours $matches : pour chaque élément, ton nom de table est en première position. Tu peux enlever des ?: pour avoir plus d'infos. [Edit] Correction : ça ne fonctionnait pas correctement pour les UPDATE. Pour avoir les résultats, tu dois tester chaque $match : si $match[2] est non vide, alors c'est ton nom de table, sinon tu le trouveras dans $match[1].
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
||
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Citation:
une question : pourquoi tu t'embete a définir des trucs avant le FROM et apres le nom de la TABLE ... ca ne sert a rien ici. il faut optimiser (le code et la comprehension !!)
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
|
00
|
|
|
#6 | ||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
C'est pour les requêtes UPDATE. Comment les gères-tu si tu ne mets rien ?
De plus, il est plus performant d'ancrer les regex et de les faire commencer par une chaîne littérale. Dans mon exemple, il n'y a pas d'ancrage car on peut parser une chaîne complète pour plusieurs requêtes. [Edit] Tiens, pour la compréhension Code :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Code :
preg_match(/(FROM|INTO|UPDATE)\s+(\w+)/i,$SQL,$resultat)
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
00
|
|
|
#8 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Ouaip...
/me va se pendre
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#9 | ||
|
Membre éclairé
![]() Inscription : août 2005 Messages : 361 ![]() |
Code :
__________________
Le but de tout developpeur OO est de devenir une référence. Mon avatar est un ambigramme, les curieux peuvent le retourner ;-) Aider <> Faire a la place de!!! |
||
|
|
00
|
|
|
#10 | ||
|
Membre éclairé
![]() Inscription : août 2005 Messages : 361 ![]() |
Code :
__________________
Le but de tout developpeur OO est de devenir une référence. Mon avatar est un ambigramme, les curieux peuvent le retourner ;-) Aider <> Faire a la place de!!! |
||
|
|
00
|
|
|
#11 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Arf, tu voudrais pas utiliser la balise code stp ?
Sinon, ne serait-ce pas parce que tu as mis ta chaîne en commentaires ? Tu n'aimes pas la solution de maxoo ? [Edit] La vraie réponse : la classe qui matche ce qui suit SELECT est "[a-z0-9_]", or tu utilises également d'autres signes comme "?", "+", etc. Modifie la classe ou utilise la solution de maxoo (plus simple, c'est évident). [Edit 2] Tu mets également une obligation de trouver "ORDER BY" alors qu'il n'y en a pas...
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#12 | |||
|
Membre éclairé
![]() Inscription : août 2005 Messages : 361 ![]() |
mon select est :
Code :
SELECT WO_NUM, TASK, TYPE, STATUS ,'DETAIL.PHP?NUM=' + CAST( WO_NUM AS CHAR ) FROM TASKS WHERE TYPE IS NOT NULL AND STATUS <> 'TERMINÉ' ORDER BY WO_NUM DESC Code :
preg_match_all('/(?:SELECT)\s([a-z0-9_\'\?\+\.\=\(\)]+)?\s?(?:ORDER BY\s)`?([a-z0-9_]*\s?)/i', $msSQL, $matches, PREG_SET_ORDER); la solution de maxoo me donne tjrs : Citation:
Citation:
Citation:
__________________
Le but de tout developpeur OO est de devenir une référence. Mon avatar est un ambigramme, les curieux peuvent le retourner ;-) Aider <> Faire a la place de!!! |
|||
|
|
00
|
|
|
#13 | |||
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Code :
Citation:
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|||
|
|
00
|
|
|
#14 | |
|
Membre éclairé
![]() Inscription : août 2005 Messages : 361 ![]() |
j'ai cherché! la preuve .... dans mon post precedent en mélangeant les deux preg j'ai essayé de faire ca:
l'adaptation qui me donne le resultat le plus proche est : Citation:
__________________
Le but de tout developpeur OO est de devenir une référence. Mon avatar est un ambigramme, les curieux peuvent le retourner ;-) Aider <> Faire a la place de!!! |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com