voir 3eme postes
voir 3eme postes
j'ai trouvé donc je mets la réponse ça peut toujours servir a d'autre
$re = "/^ # Match start of string
(UPDATE\s+.+?) # listes des tables entre UPDATE et SET
(\s+SET\s+.+?=.+?,?.+?=\s*?'.+?') # listes des champs entre SET et WHERE
(\s+WHERE\s+.+?=.+?(\s+AND\s+)?.+?) # listes des conditions après WHERE
$ # Match end of string
/xi";
je mets ici le résultat de ma recherche
ces différents mask peuvent surement être amélioré mais déja il constitu une bonne base
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205 function parse_query($query){ $pos = strpos($query, "INSERT"); if(!($pos === false)){ return parse_insert($query); } $pos = strpos($query, "UPDATE"); if(!($pos === false)){ return parse_update($query); } $pos = strpos($query, "DELETE"); if(!($pos === false)){ return parse_delete($query); } $pos = strpos($query, "SELECT"); //en dernier car on peut trouver un SELECT dans les 3 précendents requettes if(!($pos === false)){ return parse_select($query); } } function parse_insert($query){ $re = "/^ # Match start of string INSERT\s+INTO\s(?P<tables>.+?) # listes des tables qui vont subir l'insertion \s* (?P<fields>\(.+?,?.+?\)) # listes des champs à insérer (?: \sVALUES\s(?P<values>\(.+?,?.+?\))? # liste des valeurs à insérer | # ou (?P<select>\sSELECT\s.+?)? # select ramenant les valeurs à insérer ) $ # Match end of string /sxim"; preg_match($re, $query, $matches); return $matches; } function parse_update($query){ $re = "/^ # Match start of string UPDATE\s+(?P<tables>.+?) # listes des tables entre UPDATE et SET \s+SET\s+(?P<set>.+?=\s*(?:'|\().*?(?:'|\)) # champ après le SET \s* (?:, # la virgule (,) .+?=\s*(?:'|\().*?(?:'|\)) # listes des champs entre virgule (,) )? ) \s+WHERE\s+(?P<where>.+?(\sAND\s)?.+?) # listes des conditions après WHERE $ # Match end of string /sxim"; if(!preg_match($re, $query, $matches)){ $re = "/^ # Match start of string UPDATE\s+(?P<tables>.+?) # listes des tables entre UPDATE et SET \s+SET\s+(?P<set>.+?=\s*(?:'|\().*?(?:'|\)) # champ après le SET \s* # 1 seul champ updaté donc pas de virgule ) \s+WHERE\s+(?P<where>.+?(\sAND\s)?.+?) # listes des conditions après WHERE $ # Match end of string /sxim"; preg_match($re, $query, $matches); } return $matches; } function parse_delete($query){ $re = "/^ # Match start of string DELETE\s+FROM\s+(?P<tables>.+?) # listes des tables \s+WHERE\s+(?P<where>.+?(\sAND\s)?.+?) # conditions $ # Match end of string /sxim"; preg_match($re, $query, $matches); return $matches; } function parse_select($query){ $re = "/^ # Match start of string (SELECT\s+ (?P<select>.+?) # liste des champs ) # obligatoire (?:\s+FROM\s+ (?P<from>.+?) # liste des tables ) # obligatoire (?:\s+WHERE\s+ (?P<where>.+?) # liste des conditions )? # facultatif (?:\s+GROUP\s+BY\s+ (?P<group>.+?) # liste des champs du group )? # facultatif (?:\s+HAVING\s+ (?P<having>.+?) # liste des conditions du having )? # facultatif (?:\s+ORDER\s+BY\s+ (?P<order>.+?) # liste des champs du order )? # facultatif $ # Match end of string /sxim"; preg_match($re, $query, $matches); return $matches; } /* function parse_field_list($query) * SAMPLE : parse_field_list("Field_Name_1 = 'Field_Value', Field_Name_2 = (SELECT Field_Name_2 FROM Table_name WHERE ID_Table_name='x')"); retrun : Array( [0] => Array( [0] => Field_Name_1 = 'Field_Value', [1] => Field_Name_2 = (SELECT Field_Name_2 FROM Table_name WHERE ID_Table_name='x') ) [champs_val] => Array( [0] => Field_Name_1 [1] => ) [val] => Array( [0] => Field_Value [1] => ) [champs_sql] => Array( [0] => [1] => Field_Name_2 ) [sql] => Array( [0] => [1] => SELECT Field_Name_2 FROM Table_name WHERE ID_Table_name='x' ) ) */ function parse_set_list($query){ $re = "/ (?: # START parenthèse non capturante [valeur de type: ='valeur'] (?P<champs_val>[[:alnum:]_\.]+) # NOMS de champ avec une valeur de type: ='valeur' \s*=\s* # séparateur (=) entre le nom du champ et sa valeur '(?P<val>.*?)' # VALEURS de champ avec une valeur de type: ='valeur' \s*,? # test la présence d'une virgule (,) facultative ) # END parenthèse non capturante | # ou (?: # START parenthèse non capturante [valeur de type: =(SELECT...FROM...WHERE...)] (?P<champs_sql>[[:alnum:]_\.]+) # NOMS de champ avec une valeur de type: =(SELECT...FROM...WHERE...) \s*=\s* # séparateur (=) entre le nom du champ et sa valeur \((?P<sql>.+?)\) # VALEURS de champ avec une valeur de type: =(SELECT...FROM...WHERE...) \s*,? # test la présence d'une virgule (,) facultative ) # END parenthèse non capturante /sxim"; preg_match_all($re, $query, $matches); return $matches; } /* function parse_values_list($query) * SAMPLE : parse_values_list("('Field_Value', (SELECT Field_Name_2 FROM Table_name WHERE ID_Table_name='x'))"); retrun : Array( [0] => Array( [0] => 'Field_Value', [1] => (SELECT Field_Name_2 FROM Table_name WHERE ID_Table_name='x') ) [val] => Array( [0] => Field_Value [1] => ) [sql] => Array( [0] => [1] => SELECT Field_Name_2 FROM Table_name WHERE ID_Table_name='x' ) ) */ function parse_values_list($query){ $re = "/ (?: # START parenthèse non capturante [valeur de type: ='valeur'] '(?P<val>.*?)' # VALEURS de champ avec une valeur de type: ='valeur' \s*,?\s* # test la présence d'une virgule (,) facultative ) # END parenthèse non capturante | # ou (?: # START parenthèse non capturante [valeur de type: =(SELECT...FROM...WHERE...)] \((?P<sql>.+?)\) # VALEURS de champ avec une valeur de type: =(SELECT...FROM...WHERE...) \s*,?\s* # test la présence d'une virgule (,) facultative ) # END parenthèse non capturante /sxim"; preg_match_all($re, get_ensemble($query), $matches); return $matches; } function parse_fields_list($query){ $matches = explode(",",get_ensemble($query)); return $matches; } //retourne 1 le texte compris entre la première ( et la derniere ) de $query //permet de supprimer les () dans les ensembles VALUES (...) ou INSERT INTO t1 , t2 (...) //utilisé dans les fonctions: // -> parse_values_list // -> parse_fields_list function get_ensemble($query){ $re = "/^ \s* \( \s* (?P<ensemble>.*?) \s* \) \s* $ /sxim"; preg_match_all($re, $query, $matches); return $matches["ensemble"][0]; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager