PDO MYSQL创建表(如果不存在)并查明是否已创建

时间:2017-12-28 21:51:24

标签: php mysql pdo

是否有可能向PDO询问是否

CREATE TABLE IF NOT EXISTS

语句实际创建了一个表?我正在寻找类似于INSERT IGNORE语句后检查lastInsertID的东西。如果没有从PDO获得lastInsertID的结果,则没有插入数据(因为已经存在的键)。

1 个答案:

答案 0 :(得分:2)

虽然mysql的文档不是很好,但如果表存在,if not exists子句将导致mysql警告。不幸的是,PDO只捕获mysql错误,而不是警告,所以你必须在show warnings之后执行create table sql语句并解析其结果以检查是否有任何警告:

$warnings = $pdoconn->query("SHOW WARNINGS")->fetchObject();
// example output of $warnings OR NULL
// stdClass Object
// (
//        [Level] => Warning
//        [Code] => 1050
//        [Message] => Table '...' already exists
// )

如果没有发出警告表示该表已经存在并且没有为create table语句引发其他错误,那么该表是作为上一个create table的结果创建的。

老实说,不使用if not exists子句然后只使用标准的pdo异常处理来捕获mysql错误(如果表存在)可能更简单。 if not exists子句实际上适用于没有正确错误处理的长sql脚本。