首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:使用REGEX从mysql查询中获取表名

问PHP:使用REGEX从mysql查询中获取表名
EN

Stack Overflow用户
提问于 2010-03-18 17:01:46
回答 6查看 7.9K关注 0票数 3

考虑下面这三条mysql语句:

代码语言:javascript
复制
select * from Users;
select id, title, value from Blogs;
select id, feelURL, feelTitle from Feeds where id = 1; 

现在我不太擅长REGEX,但是我想从mysql查询中获得表名。有没有人可以给我做一个小小的解释。

谢谢,

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-18 17:11:18

尝试:

代码语言:javascript
复制
preg_match('/\bfrom\b\s*(\w+)/i',$query,$matches)

如果查询有1个以上的表,这将不起作用。

基本上,正则表达式在查询中搜索完整的单词FROM,并选择下面的单词作为表名。

票数 2
EN

Stack Overflow用户

发布于 2011-02-21 23:50:50

您实际上可以使用MySQL作为解析器,并在查询中获得表名,无论您的SQL语法有多复杂。

(很抱歉,这是对您的问题的延迟回复-我今天刚刚遇到了同样的问题,并找到了这个解决方案。)

只需在查询前加上单词EXPLAIN,返回到PHP的结果集将包括id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra。第三列是查询中每个表的名称。

例如,如果您的查询是:

代码语言:javascript
复制
select count(*) from ey_def left join ey_rels on def_id=item_id;

使用:

代码语言:javascript
复制
explain select count(*) from ey_def left join ey_rels on def_id=item_id;

然后MySQL会把这个返回给PHP:

代码语言:javascript
复制
+----+-------------+---------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+---------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | ey_def  | index | NULL          | PRIMARY | 4       | NULL |   87 | Using index |
|  1 | SIMPLE      | ey_rels | ALL   | NULL          | NULL    | NULL    | NULL |  123 |             |
+----+-------------+---------+-------+---------------+---------+---------+------+------+-------------+

现在您可以像处理任何其他查询一样简单地处理结果。

票数 5
EN

Stack Overflow用户

发布于 2010-03-18 17:11:56

一个简单的实现是这样的:

代码语言:javascript
复制
preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);

echo $query . " => " . $match[1] . "\n";

当您的选择字段列表中有一个子查询时(可能在其他几种情况下),此将中断。或者当您的表名在a-z、数字和下划线旁边包含字符时。

正确解析SQL并非易事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2468497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档