Php PDO如何在MySQL数据库中为INSERT获取重复的键列名?

Php PDO如何在MySQL数据库中为INSERT获取重复的键列名?,php,insert,pdo,duplicates,Php,Insert,Pdo,Duplicates,如果以前有人问过这个问题,我很抱歉,但我很长一段时间都找不到答案 问题是当试图在MySQL表中插入具有多个唯一键的行时。如果我们参考下表: ---------------------------------------- | id | username | email | ---------------------------------------- | 1 | myuser | test@test.com | ---------------

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

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

----------------------------------------
|   id   | username |      email       | 
----------------------------------------
|    1   | myuser   | test@test.com    |
----------------------------------------
用户名电子邮件都是唯一的键。如果我运行一个查询来插入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,但是明天有人可以在数据库中更改密钥、删除密钥或添加新密钥,而密钥编号似乎不是可靠的信息来源

或者,最好的选择是选择所有作为键的值,以便在插入之前检查它们


谢谢大家!

不,没有办法获得更好的错误消息,其中包含哪些表失败的信息。您在数组中看到的消息“键3的重复条目‘myuser’”几乎就是您想要的信息。数字3实际上是您创建的索引的名称。您可以更改为更有意义的用户名,并获得更好的错误消息,您可以将其转发给用户。如果要生成自定义错误消息,则必须从该消息中提取所需信息。

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

该错误消息是真的吗?我发现“关键3”部分有点奇怪,因为它应该在这里说用户名。。。我想。