2011-06-12 179 views
0

我有以下查詢:解析SQL查詢

CREATE TABLE `test` (
`col1` INT(10) NOT NULL , 
`col2` VARCHAR(50) NOT NULL , 
`col3` DATE NOT NULL 
) ENGINE = MYISAM ; 

我想編寫一個通用PHP腳本,從上面的查詢獲取表名(測試)。

+0

您可以使用正則表達式。都是CREATE TABLE類型的輸入查詢嗎? – 2011-06-12 17:17:30

+0

什麼將是正則表達式。我在正則表達式中不太好.. – Student 2011-06-12 17:18:24

+0

如果你所有的查詢都是CREATE TABLE,你可以分割它,只是得到第三個字,對吧? – 2011-06-12 17:18:58

回答

1

如果你可以訪問你運行查詢之前它獲取查詢字符串,你可以這樣做:

preg_match("/^create table `(?P<tablename>)`/i", $query, $matches); 
print_r($matches); 

/* 
    Output: 
    Array 
    (
     [0] => CREATE TABLE `test` (`col1` INT(10) NOT NULL ,`col2` VARCHAR(50) NOT   NULL , `col3` DATE NOT NULL) ENGINE = MYISAM ; 
     [tablename] => test 
     [1] => test 
    ) 
*/ 

如果你不能因爲某些原因訪問字符串,但你知道,沒有什麼創建在查詢和代碼之間的數據庫中,則可以使用此查詢檢索最後創建的表:

SELECT 
    * 
FROM 
    information_schema.TABLES 
ORDER BY 
    CREATE_TIME DESC 
LIMIT 
    1;