是否有可能向PDO询问是否
CREATE TABLE IF NOT EXISTS
语句实际创建了一个表?我正在寻找类似于INSERT IGNORE语句后检查lastInsertID的东西。如果没有从PDO获得lastInsertID的结果,则没有插入数据(因为已经存在的键)。
答案 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脚本。