【问题标题】:How to tell if PDO MySQL INSERT was successful with IGNORE如何通过 IGNORE 判断 PDO MySQL INSERT 是否成功
【发布时间】:2015-04-02 23:11:17
【问题描述】:

我知道我可以简单地if ($PDO->execute()) { //true } 来查看 PDO INSERT 是否成功,但如果涉及 IGNORE 怎么办?

例如。

INSERT IGNORE INTO MyTable SET DateTime = CAST(:dateTime AS DATETIME)

如果记录已经存在,因此被忽略,->execute() 会返回true 还是false

我似乎找不到任何可以告诉我的文档。

【问题讨论】:

  • INSERT IGNORE 将始终成功,如果 PHP 和 MySQL 之间的连接没有在中途中断或发生其他干扰 MySQL 正常内部工作的事情。由于您只提到了一半的问题(我们不知道您为什么使用IGNORE),并且您需要知道是否有这样的记录-为什么不使用常规插入并捕获异常以防万一记录存在吗?这是有问题的批量插入吗?
  • @N.B.谢谢。我自己才发现这一点。另外,回答你的问题:情况是相反的。我只想知道记录是否被更改。

标签: mysql pdo insert


【解决方案1】:

试试:

$stmt->execute();
$stmt->rowCount();

这将告诉您有多少行受到上次查询的影响。

【讨论】:

  • 是否有一种简单/快速的方法来确定哪些行受到影响和哪些被忽略?即不获取“JUST”计数,而是指示插入哪些记录与忽略哪些记录。
【解决方案2】:

我认为这可以让我得到一个快速的答案,但事实并非如此,所以我自己测试了它:

如果 IGNORE 语句未更改任何记录,则 ->execute() 仍会返回 true。如果有错误,它只会返回false

【讨论】:

  • 是的。我发现了。上面 Ian Wood 的回答似乎在忽略时产生了正确的插入计数。
猜你喜欢
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2013-09-27
相关资源
最近更新 更多