PDO MYSQL 如果不存在则创建表并找出它是不是已创建

Posted

技术标签:

【中文标题】PDO MYSQL 如果不存在则创建表并找出它是不是已创建【英文标题】:PDO MYSQL Create table if not exists and find out if it has been createdPDO MYSQL 如果不存在则创建表并找出它是否已创建 【发布时间】:2017-12-28 21:51:23 【问题描述】:

是否有可能询问 PDO 是否存在

CREATE TABLE IF NOT EXISTS

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

【问题讨论】:

if(condition is true) great else not so great 简而言之。 @funky Forty Niner:好的,谢谢,但问题是,我从哪里获得条件参数? 您可以为查询分配一个变量并检查它是否成功并检查else php.net/manual/en/pdo.error-handling.php 上的错误。这就是我从中得到的。 @FunkFortyNiner 不,在这种特殊情况下不会引发错误。 【参考方案1】:

虽然 mysql 的文档在这方面不是很好,但如果表确实存在,if not exists 子句将导致 mysql 警告。不幸的是,PDO 只捕获 mysql 错误,而不是警告,因此您必须在 create table 之后执行 show warnings 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 脚本。

【讨论】:

我认为我会使用 PDO 异常处理,这对我来说似乎是最安全的解决方案。

以上是关于PDO MYSQL 如果不存在则创建表并找出它是不是已创建的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery:如果不存在则创建表并使用 Python 和 Apache AirFlow 加载数据

Mysql:如果不存在则执行。是不是可以提高性能?

MySQL 仅在表不存在时插入数据

JDBC / MySQL:如何在创建数据库或关系时检查数据库或关系是不是存在,如果存在则打印错误

比较 2 个表并返回 MySQL 中的变化

如果 PDO 和 mysqli 不可用,使用 mysql_* 函数是不是安全?