Разбор SELECT предложения SQL-запросов в массив PHP

Это больше для анализа запроса в PHP до его отправки на сервер. Очень сложно, почему я это делаю, поэтому я бы не стал объяснять причину этого.

В PHP мне нужно сохранить выбор полей в php-массиве. Поэтому возьмите этот запрос, например:

SELECT user_id,username,DATE(join_datetime) as join_date, (SELECT COUNT(1) FROM foobar WHERE foonum IN (5,4,6) and user_id = users.user_id) as myfoo_count FROM users WHERE user_id = 123 

Итак, в этом случае мне нужно сохранить «user_id», «username», «DATE» (join_datetime) как join_date, (SELECT COUNT (1) FROM foobar WHERE foonum IN (5,4,6) и user_id = users.user_id) как myfoo_count »в массив, взорванный запятой (,). Поэтому я бы получил:

 array ( [1] => 'user_id', [2] => 'username', [3] => 'DATE(join_datetime) as join_date', [4] => '(SELECT COUNT(1) FROM foobar WHERE foonum IN (5,4,6) and user_id = users.user_id) as myfoo_count' ) 

Я добрался до части поля запроса, но я попытался взорвать поля запятыми. Основная проблема заключается в подзапросах, которые могут иметь в них также запятые (см. Пример).

Спасибо за любую помощь!

Solutions Collecting From Web of "Разбор SELECT предложения SQL-запросов в массив PHP"

Вам нужно будет написать парсер почти такой же сложный, как синтаксический анализатор запросов MySQL (написанный в YACC / Bison для C). Это не будет регулярное выражение или небольшая манипуляция строк. Это нерегулярный язык, вы не можете разобрать их без фактического анализатора.

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

http://dev.mysql.com/doc/refman/5.0/en/expressions.html

Если вы действительно хотите сделать это с помощью PHP, у вас впереди большая работа.

Для тех, кто сталкивается с этим вопросом в будущем, кто-то уже столкнулся с проблемой написания парсера SQL в PHP .

В настоящее время он поддерживает операторы SELECT, INSERT, UPDATE, DELETE и REPLACE.