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

php*_*utt 3 php regex preg-match

考虑这三个mysql语句:

select * from Users;
select id, title, value from Blogs;
select id, feelURL, feelTitle from Feeds where id = 1; 
Run Code Online (Sandbox Code Playgroud)

现在我不是很擅长REGEX,但我想从mysql查询中获取表名.有人可能会为我创建一个有一点解释.

谢谢,

小智 5

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

(对不起,这是对你的问题的迟到回复 - 我今天遇到了同样的问题并找到了这个解决方案.)

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

例如,如果您的查询是:

select count(*) from ey_def left join ey_rels on def_id=item_id;
Run Code Online (Sandbox Code Playgroud)

使用:

explain select count(*) from ey_def left join ey_rels on def_id=item_id;
Run Code Online (Sandbox Code Playgroud)

MySQL会将此返回给PHP:

+----+-------------+---------+-------+---------------+---------+---------+------+------+-------------+
| 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 |             |
+----+-------------+---------+-------+---------------+---------+---------+------+------+-------------+
Run Code Online (Sandbox Code Playgroud)

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