Это больше для анализа запроса в 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' )
Я добрался до части поля запроса, но я попытался взорвать поля запятыми. Основная проблема заключается в подзапросах, которые могут иметь в них также запятые (см. Пример).
Спасибо за любую помощь!
Вам нужно будет написать парсер почти такой же сложный, как синтаксический анализатор запросов MySQL (написанный в YACC / Bison для C). Это не будет регулярное выражение или небольшая манипуляция строк. Это нерегулярный язык, вы не можете разобрать их без фактического анализатора.
Вы не можете просто пройти через запятую и круглые скобки, SQL намного сложнее. У вас есть выражения в выражениях, вызовах функций, условной логике и т. Д., Все из которых могут быть вложены сколь угодно глубоко с запятыми и круглыми скобками.
http://dev.mysql.com/doc/refman/5.0/en/expressions.html
Если вы действительно хотите сделать это с помощью PHP, у вас впереди большая работа.
Для тех, кто сталкивается с этим вопросом в будущем, кто-то уже столкнулся с проблемой написания парсера SQL в PHP .
В настоящее время он поддерживает операторы SELECT, INSERT, UPDATE, DELETE и REPLACE.