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 加载数据