php - PDO如何在MySQL数据库中获取INSERT的重复键列名称?

标签 php insert pdo duplicates

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

问题是当尝试在具有多个 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/

相关文章:

php - 如何以与数组相同的顺序将索引数组的值插入到 MySQL 表中

php - 没有在命名空间中捕获 PDOException

php - 同一服务器上两个数据库之间的 MSSQL LEFT JOIN,使用 PDO 时不返回任何内容

php - XAMPP 7.0.6 中的 api-ms-win-crt-runtime-l1-1-0.dll 丢失错误

php - Eloquent 多行插入并在一个数组循环中

php - 是否存在类似反向准备语句的东西?

mysql - 有没有更好的方法来运行这个 mysql 更新?

C# 将字节添加到文件的开头?

php - 使用准备好的语句更新许多行

php - IF 和 ELSE 语句不起作用