【问题标题】:Get duplicate entry error message and use in if statement获取重复输入错误消息并在 if 语句中使用
【发布时间】:2017-09-13 22:24:22
【问题描述】:

如果 PDO 发生重复输入错误,我想收到错误消息。

这是我在可能出现重复条目​​时使用的代码,因为 id 是唯一键:

$movetotable = $conn->prepare("INSERT INTO `$table` SELECT * FROM `$trashtable` WHERE id = :id");
$movetotable->bindParam(':id', $id, PDO::PARAM_STR);
$movetotable->execute();

我希望 PHP PDO 可以实现,我知道这一点:PDO::errorCode() 但我根本不知道如何在 if 语句中使用它。

提前致谢

【问题讨论】:

  • 如果你知道,可能会有错误,为什么不检查重复条目,你做你的插入查询?
  • 通过匹配表中的 id 检查重复数据并从那里采取相应措施
  • 如果您不必对重复条目执行任何特定逻辑,则可以使用 INSERT IGNORE INTO 或使用 ON DUPLICATE KEY UPDATE 选项
  • @Philipp @Akin 我不明白该怎么做?我应该在 $movetotable = $conn->prepare("INSERT INTO $table SELECT * FROM $trashtable WHERE id = :id"); 使用 PHP 之后立即执行此操作吗?查询本身?
  • @Aruna INSERT IGNORE INTO 不是一个选项,因为我不想丢失该行。 ON DUPLICATE KEY UPDATE 对我来说是一个选项,我已经尝试过了,但唯一得到的是下一个错误(语法错误)。它说我没有以正确的方式使用重复密钥更新。你知道如何在我上面的问题中使用它吗?

标签: php mysql pdo duplicates


【解决方案1】:
$stmt = $conn->prepare("INSERT IGNORE INTO `$table` SELECT * FROM `$trashtable` WHERE id = ?");
$stmt->execute([$id]);
$id = $conn->lastInsertId();
if (!$id) {
    echo "a dupe!";
}

【讨论】:

  • 嗨@your-common-sense,我已经解决了重复的问题,看看我下面的答案,我还有另一个问题
  • 你没有一个问题,而是一大堆问题。所以你不能说它已经解决了。因此最好使用我的解决方案。
  • 您的解决方案的问题是我已经尝试过了,但没有成功。如果你能如此慷慨地解释我遇到的所有问题是什么?
  • 如果你愿意的话告诉我该怎么做?
  • INSERT IGNORE INTO 不是我想要的,因为该行将消失,该行应添加为具有新 ID 的新行。你明白了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 2015-04-25
相关资源
最近更新 更多