如果之前有人问过这个问题,我很抱歉,但我很长一段时间都找不到答案。
问题是当尝试在具有多个 UNIQUE 键的 MySQL 表中插入行时。如果我们以下表为引用:
----------------------------------------
| id | username | email |
----------------------------------------
| 1 | myuser | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c58495f586c58495f58024f4341" rel="noreferrer noopener nofollow">[email protected]</a> |
----------------------------------------
用户名和电子邮件都是唯一键。如果我运行查询来插入用户名 = 'myuser' 的新行,我将收到重复条目的 1062 错误,并且消息中的一些文本表明 id 3 的键已重复。像这样的事情:
array(3) {
[0]=>
string(5) "23000"
[1]=>
int(1062)
[2]=>
string(34) "Duplicate entry 'myuser' for key 3"
}
PDO 中有没有办法获取重复列的名称,以便我可以向用户显示由于此错误而需要更改哪个字段?
因为情况是两个字段都可以重复,或者只是第一个/第二个字段,我需要告诉用户到底是哪个字段。
我想解析文本消息并对 key 的 ID 进行硬编码,但明天有人可以更改数据库中的 key 、删除 key 或添加新 key ,并且 key 编号似乎不是可靠的 key 来源信息。
或者也许最好的选择是选择所有作为键的值以在插入之前检查它们?
谢谢!
最佳答案
不,没有办法获得更好的错误消息,其中包含失败的表的信息。您在数组“Duplicate Entry 'myuser' for key 3”中看到的消息几乎就是您想要的信息。数字 3 实际上是您创建的索引的名称。您可以更改为更有意义的名称,例如“用户名”,并获得更好的错误消息,您可以将其转发给用户。如果您想制作自定义错误消息,则必须从该消息中提取所需的信息。
关于php - PDO如何在MySQL数据库中获取INSERT的重复键列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837001/