【问题标题】: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 不,在这种特殊情况下不会引发错误。

标签: php mysql pdo


【解决方案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 异常处理,这对我来说似乎是最安全的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-08-19
  • 2016-11-05
  • 2023-03-23
  • 2010-09-19
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多