如何在 php + mysql 更新前检查重复条目?

how to check for duplicate entry before update in php + mysql?

检查重复的“用户名”字段

个案:

如果用户想要更新用户名字段以外的记录(如名字或其他),我使用简单的 select 查询来检查重复项,例如

"SELECT * from user where username = $username" 

并检查计数,因为用户名已经存在(在同一记录中)return 计数 1

个案:

如果用户更改用户名(它现在是唯一的)并使用与它相同的查询检查是否重复 returns 0 并且它工作正常

所以如果用户不更改用户名而不是上面的查询中断

所以我将查询更改为:

"SELECT * 
   FROM user 
  WHERE `username` = $username 
    AND user_ID != $uid" (here user_ID is primary key) 

所以它不会检查当前记录,是否正确?

编辑:
我的项目是基于 mvc 的,modal 有全局函数,比如

insert($tablename,$condition)
update($tablename,$condition)

等 和更新功能就像
创建 sql 查询(动态地基于 $condition)
使用 $result = $query->execute(); 执行查询

 if ($result) {
   $msg = 'true';  
 } else {
     $msg = 'false';
 }

  $data = array(
    'result' => $msg,
      'query' => $sql,
     'eventType' => 'Update'
   );
  return $data;
 

那么我如何捕获重复条目异常(我的意思是它发生在哪个列上(当存在多个唯一键时))

执行 SQL 的最佳方法是让结构强制执行合同:

如果您想要一个唯一的用户名,请在其上声明一个唯一的键。 ALTER TABLE user ADD UNIQUE KEY username_uniq(username)

不要试图预先检测它,这将始终受到竞争条件的影响。

UPDATE/INSERT 违反约束时捕获重复键错误异常。