2011-11-16 63 views
0

我的問題涉及到識別執行mysql命令的表和模式。我從PDO包裝在PHP從MySQL命令中提取表名

運行此例如:

USE db1; 
SELECT * FROM `table`; 

我可以使用DESCRIBE SELECT * FROM table拿到表的名稱,並假設模式的名稱爲DB1。

現在,當我想要做這樣的

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

東西我可以用再描述命令表的名稱。然而,我無法在MySQL中找到一個方法,它給了我執行該命令的模式。

有沒有辦法使用正則表達式從MySQL命令中提取數據庫和表名。假設沒有加入,並且該命令只是一個SELECT

+0

我想你的意思*數據庫*,*不*架構。 –

+0

爲什麼當你只用它來運行查詢時,你需要再次獲取表名? – ManseUK

+0

,您可以使用'select database'獲取當前數據庫? – ManseUK

回答

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)