[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разбить SQL-запрос на составляющие
Nikitian
Столкнулся с проблемой: на подопечном мне сайте надо анализировать sql-запросы и делать в зависимости от типа и параметров запроса различные действия. К сожалению не могу переписать всё полностью, а в регулярках не силён. Может кто писал когда-то функции для разбивки sql-запроса по аналогии с parse_url.



Спустя 9 минут, 47 секунд (8.10.2009 - 11:40) glock18 написал(а):
а какие составляющие собственно интересуют? какая детальность то есть...

Спустя 50 минут, 41 секунда (8.10.2009 - 12:30) Nikitian написал(а):
Тип запроса, параметры, переданные ему (массив "параметр"=>"значение").

Спустя 35 минут, 56 секунд (8.10.2009 - 13:06) glock18 написал(а):
ну скажем, тип запроса, видимо, (select/update/insert/replace и т.д. т.п.) можно определить достаточно просто. хотя бы substr_compare по первым n символов.

select вообще лучше по-словно парсить, если переписывать влом. ибо параметров уж очень много может быть понапихано в разных местах.

для запросов, использующих set, можно попробовать регулярку типа

/([\w\d]+)\s*=\s*('?[\w\d]*'?)/

in в условии вылетает в трубу. усложнять то есть надо будет.
для запросов с value/values что-то типа

/(|value|values|,)\s*\((.*?)\)/

первая "скобочка" для того, чтобы определить что будет в скобках - названия полей или значения. пусто - значит названия полей, иначе значения.
запросы insert/replace+select тоже в трубу.

вообще конечно лучше, если переписывать совсем влом, то проходить по-словно, и выписывать оттуда все слова, не считающиеся ключевыми. если ключевых слов немного будет, то мусор собираться будет, конечно. но его можно и разобрать в принципе при необходимости.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.