将SQL查询的SELECT子句解析为PHP数组

时间:2011-02-11 11:53:46

标签: php mysql arrays string explode

这更适用于在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)as 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'
)

我已经得到了提取查询的字段部分,但我坚持尝试用逗号分解字段。主要问题是子查询中也可能有逗号(参见示例)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

你必须编写一个几乎和MySQL的查询解析器一样复杂的解析器(用YACC / Bison for C编写)。它不会是一个正则表达式或一个小字符串操作。这是一种非常规语言,没有实际的解析器就无法解析它们。

你不仅可以通过字符串查找逗号和括号,SQL也比这复杂得多。你可以在表达式,函数调用,条件逻辑等中使用表达式,所有这些都可以用逗号和圆括号任意嵌套。

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

如果你真的想用PHP做这件事,那么你就要做得很好。

答案 1 :(得分:4)

对于今后遇到这个问题的人来说,有人已经遇到了写SQL parser in PHP的麻烦。

目前它支持SELECT,INSERT,UPDATE,DELETE和REPLACE语句。

相关问题