@@ -135,7 +135,7 @@ private function parseSql()
135135 }
136136 }
137137
138- // Многоитерационный разбор однострчных комментариев
138+ // Многоитерационный разбор однострочных комментариев
139139 while (true ) {
140140 if (preg_match_all ('#--\*([\w|]+)(.+)# ' , $ this ->sql , $ matches )) {
141141 $ count = count ($ matches [0 ]);
@@ -147,16 +147,29 @@ private function parseSql()
147147 }
148148 }
149149
150+ // разбор переменных - массивов, которые находились изначально вне комментариев
151+ if (preg_match_all ('#:@(\w+)# ' , $ this ->sql , $ matches )) {
152+ $ count = count ($ matches [0 ]);
153+ for ($ i = 0 ; $ i < $ count ; $ i ++) {
154+ $ this ->replaceComment ($ matches [0 ][$ i ], $ matches [0 ][$ i ], $ matches [1 ][$ i ], false );
155+ }
156+ }
157+
150158 $ this ->sql = preg_replace ("/ \n+/ " , "\n" , trim ($ this ->sql ));
151159 }
152160
153161 /**
154- * Заменяем коментарий в запросе на соответствующе преобразованный блок или удаляем.
162+ * Заменяем коментарий или некоторую другую подстроку в запросе на соответствующе преобразованный блок или удаляем,
163+ * если указан соответствующий параметр (делается по умолчанию - для комментариев).
164+ * Используется также для замены параметра-массива - :@<param_name> не помещенного в комментарий, но только если такой
165+ * параметр есть в массиве параметров. Отдельную функцию делать не стали, потому что функционал одинаковый.
166+ * Либо можно переименовать функцию.
155167 * @param string $comment Заменямый комментарий.
156168 * @param string $queryInComment Текст внутри комментария.
157169 * @param string $paramName Имя параметра.
170+ * @param boolean $replaceNotFoundParam заменять ли комментарий, если не нашли соответствующего параметра в списке
158171 */
159- private function replaceComment ($ comment , $ queryInComment , $ paramName )
172+ private function replaceComment ($ comment , $ queryInComment , $ paramName, $ replaceNotFoundParam = true )
160173 {
161174 $ param = $ this ->getParam ($ paramName );
162175
@@ -218,7 +231,7 @@ private function replaceComment($comment, $queryInComment, $paramName)
218231 }
219232 $ queryInComment = preg_replace ('/:@ ' . preg_quote ($ paramName ) . '/i ' , $ replacement , $ queryInComment );
220233 }
221- } else {
234+ } elseif ( $ replaceNotFoundParam ) {
222235 $ queryInComment = '' ;
223236 }
224237
@@ -235,7 +248,7 @@ private function getParam($name)
235248 {
236249 $ name = $ outName = mb_strtolower (ltrim ($ name , ': ' ));
237250
238- // Формируем имя параметра на выход точно такое же, какое и забиндено в парметры .
251+ // Формируем имя параметра на выход точно такое же, какое и забиндено в параметры .
239252 foreach ($ this ->params as $ key => $ value ) {
240253 $ key = ltrim ($ key , ': ' );
241254 if (mb_strtolower ($ key ) == $ name ) {
0 commit comments