从MySQL命令中提取表名

时间:2011-11-16 20:26:05

标签: php mysql

我的问题涉及识别执行mysql命令的表和模式。我是从PHP中的PDO包装器运行它

例如:

USE db1;
SELECT * FROM `table`;

我可以使用DESCRIBE SELECT * FROM table获取表的名称,并假设模式的名称是db1。

现在,当我想做这样的事情时

USE db1;
SELECT * FROM `db2`.`table`

我可以再次使用describe命令获取表的名称。但是,我无法在MySQL中找到一个方法,它为我提供了执行命令的模式。

有没有办法使用regex从MySQL命令中提取数据库和表名。假设没有连接,命令只是一个SELECT

1 个答案:

答案 0 :(得分:0)

使用查询分析器生成的查询应该为您提供您想要的内容。要明确这是数据库测试中的表测试。

explain extended select * from test;

+----+-------------+-------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | test  | ALL  | NULL          | NULL | NULL    | NULL |    5 |   100.00 |       |
+----+-------------+-------+------+---------------+------+---------+------+------+---------    -+-------+
1 row in set, 1 warning (0.00 sec)

别忘了做节目警告

show warnings;
+-------+------+--------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                              |
+-------+------+--------------------------------------------------------------------------------------------------------------------------------------+
| Note  | 1003 | select `test`.`test`.`id` AS `id`,`test`.`test`.`name` AS `name`,`test`.`test`.`date_modified` AS `date_modified` from `test`.`test` |
+-------+------+---------------------------------------------------------------------------    -----------------------------------------------------------+
1 row in set (0.00 sec)