2011-06-12 93 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;