Разбор строки SQL - PullRequest
       19

Разбор строки SQL

3 голосов
/ 13 марта 2009

Что является хорошим методом для разбора строки sql на отдельные компоненты. Я пытался с регулярным выражением, но я не могу заставить его работать правильно.

Скажем, например:

"SELECT * FROM tbl WHERE user_id > 50"

Создает массив со всеми компонентами

$arr[0] = "SELECT";
$arr[1] = "*";
$arr[2] = "FROM";

т.д ...

Спасибо

Ответы [ 5 ]

4 голосов
/ 13 марта 2009

Я бы пошел на парсер SQL, который может быть интегрирован в ваш язык: не изобретайте колесо.

Я не использовал один из них, чтобы рекомендовать, но я уверен, что вы можете найти тот, который делает то, что вам нужно.

См. Связанные: PHP MySQL SQL-парсер (INSERT и UPDATE)

3 голосов
/ 13 марта 2009

Регулярное выражение может анализировать только обычный язык . Это язык, который можно выразить с помощью конечного автомата.

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

Вам нужно будет использовать более надежный генератор синтаксического анализатора, который может обрабатывать более сложные грамматики. Вы помечаете свой вопрос с помощью PHP, так что вы можете посмотреть Lime .

Вам также необходимо найти файл грамматики для PHP, совместимый с выбранным вами генератором парсера. Я не уверен, где взять один для PHP и Lime, но есть чистый проект Perl DBIx :: MyParsePP , основанный на грамматике MySQL.

3 голосов
/ 13 марта 2009

Полный синтаксис оператора SQL SELECT очень сложен. Я думаю, что вы можете ограничить себя подмножеством.

2 голосов
/ 13 марта 2009

Правильно и полностью разбирать SQL сложно. Бесплатно вы можете использовать инструментарий генератора синтаксических анализаторов, такой как ANTLR, вместе с «грамматикой» SQL. Что касается стоимости, я знаю, что Visual Studio Team System 2008 Database Edition включает анализатор SQL.

0 голосов
/ 13 марта 2009

Пример, который вы показали, представляет собой код, который будет читать вашу инструкцию SQL и разбивать токены на интервалы между ними и сохранять каждый токен в массиве. Если вы ищете такой кусок кода, вы можете сделать это с помощью функции split в php: http://ca.php.net/split

С уважением,
Pooria.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...