解析SQL查询

时间:2011-06-12 17:15:53

标签: php sql parsing

我有以下查询:

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

我想编写一个通用的PHP脚本,从上面的查询中获取表名(test)。

1 个答案:

答案 0 :(得分: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;