一尘不染

PHP-检测由于违反唯一约束而导致的MySQL更新/插入失败

mysql

这有点类似于以下问题:

由于唯一约束,PHP MySQL INSERT失败

但我有一个不同的转折。假设我有一个只有一列的表。该列的名称为“标题”,并且具有唯一的约束。

首先,我在title =“
something”处插入一行。下次我尝试插入“某物”时,它将由于唯一的键约束而失败(很好)。我想做的是让它失败,并检查mysql提供的错误代码,以确保由于唯一键约束而失败。(即,让数据库处理唯一性,而我只处理错误代码,并在结果返回时告诉用户标题已经存在)。

有没有办法做到这一点?


阅读 266

收藏
2020-05-17

共1个答案

一尘不染

http://dev.mysql.com/doc/refman/5.5/zh-CN/error-messages-
server.html

http://php.net/manual/zh/function.mysql-
errno.php

过去我不得不这样做,这很不好玩:

if( mysql_errno() == 1062) {
    // Duplicate key
} else {
    // ZOMGFAILURE
}

在编程风格的注意事项
(现金到jensgram这个答案)
你应该总是设法避免使用幻数。相反,您可以将已知的错误代码(1062)分配给常量(例如MYSQL_CODE_DUPLICATE_KEY)。这将使您的代码更易于维护,因为if1062内存中的含义消失了几个月后,语句中的条件仍然可读:

2020-05-17