【问题标题】:PDO how to get duplicated key column name for INSERT in MySQL database?PDO 如何获取 MySQL 数据库中 INSERT 的重复键列名称?
【发布时间】:2012-02-08 20:31:53
【问题描述】:

很抱歉,如果以前有人问过这个问题,但我有一段时间找不到答案。

问题在于尝试在具有多个唯一键的 MySQL 表中插入一行时。如果我们参考下表:

----------------------------------------
|   id   | username |      email       | 
----------------------------------------
|    1   | myuser   | test@test.com    |
----------------------------------------

usernameemail 都是唯一键。如果我运行查询以插入带有 username = 'myuser' 的新行,我将收到重复条目的 1062 错误,并且消息中的一些文本表明 id 为 3 的键是重复的。像这样的:

array(3) {
  [0]=>
  string(5) "23000"
  [1]=>
  int(1062)
  [2]=>
  string(34) "Duplicate entry 'myuser' for key 3"
}

在 PDO 中有没有办法获取重复列的名称,以便我可以向用户显示由于此错误而需要更改的字段?

因为情况是两个字段都可以重复,或者只是第一个/第二个字段,我需要告诉用户究竟是哪个字段。

我想解析短信并硬编码密钥的 ID,但明天有人可以更改数据库中的密钥、删除密钥或添加新密钥,而密钥编号似乎不是可靠的来源信息。

或者也许最好的选择是在插入之前选择所有作为键的值来检查它们?

谢谢!

【问题讨论】:

  • 那个错误信息是真的吗?我发现“for key 3”部分有点奇怪,因为它应该说用户名......我想。

标签: php insert pdo duplicates


【解决方案1】:

不,没有办法获得更好的错误消息,其中包含失败的表的信息。您在数组“Duplicate entry 'myuser' for key 3”中看到的消息几乎就是您想要的信息。数字 3 实际上是您创建的索引的名称。您可以更改为更有意义的内容,例如“用户名”,并获得更好的错误消息,您可以将其转发给用户。如果您想制作自定义错误消息,则必须从该消息中提取您想要的信息。

【讨论】:

    【解决方案2】:

    同意,无法获得有关 UNIQUE 错误的有用报告。真正最好的解决方案是在 INSERT 之前调用 SELECT 并自行处理结果。它会对性能产生影响,但大多数应用程序的 INSERT 频率较低,因此您可能会侥幸成功。

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 2015-11-18
      • 1970-01-01
      • 2021-07-10
      • 2012-04-16
      • 2017-07-22
      • 1970-01-01
      • 2013-05-01
      • 2020-07-09
      相关资源
      最近更新 更多