这更多地用于在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,用户名,DATE(join_datetime)存储为join_date,(从foobar WHERE foonum IN(5,4,6)和user_id = users.user_id)中选择COUNT(1)作为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 for C编写)。它不会是正则表达式或小的字符串操作。这是一种非常规语言,没有实际的解析器就无法解析它们。
您也不能单单查找包含逗号和括号的字符串,SQL比这复杂得多。您可以在表达式,函数调用,条件逻辑等中包含表达式。所有这些表达式都可以使用嵌套在逗号和括号内的任意深度。
http://dev.mysql.com/doc/refman/5.0/en/expressions.html
如果您真的想用PHP做到这一点,那么您就需要做很多工作。