如果以前曾问过这个问题,我很抱歉,但我找不到答案了很长一段时间。
问题是尝试在具有多个UNIQUE键的MySQL表中插入行时。如果我们将下表作为参考:
----------------------------------------
| id | username | email |
----------------------------------------
| 1 | myuser | test@test.com |
----------------------------------------
用户名和电子邮件都是UNIQUE键。如果我运行查询以插入带有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,但有人可以明天更改数据库中的密钥,删除密钥或添加新密钥,并且密钥编号似乎不是可靠的来源信息。
或许最好的选择是在INSERT之前选择所有作为键检查它们的值?
谢谢!
答案 0 :(得分:4)
不,没有办法获得更好的错误消息,其中包含失败的表的信息。您在数组“密钥3的重复条目'myuser'中看到的消息几乎就是您想要的信息。数字3实际上是您所做的索引的名称。您可以更改为更有意义的内容,例如“用户名”,并获得更好的错误消息,您可以转发给用户。如果要制作自定义错误消息,则必须从该消息中提取所需信息。
答案 1 :(得分:1)
同意,没有办法获得有关UNIQUE错误的有用报告。真正最好的解决方案是在INSERT之前调用SELECT并通过自我方式处理结果。它会对性能产生影响,但大多数应用程序的插入次数较少,因此您可能会放弃它。