【问题标题】:how to check for duplicate entry before update in php + mysql? [duplicate]如何在 php + mysql 更新之前检查重复条目? [复制]
【发布时间】:2021-07-10 03:59:15
【问题描述】:

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

案例:

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

"SELECT * from user where username = $username" 

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

案例:

如果用户更改用户名(它现在是唯一的)并使用相同的查询检查是否重复,而不是返回 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;
 

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

【问题讨论】:

  • 你的引号个数不均匀
  • 而 '==' 在 MySQL 中不是一个东西
  • 没关系,我只想了解逻辑

标签: php mysql sql mysqli


【解决方案1】:

执行 SQL 的最佳方式是让结构强制执行:

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

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

当和UPDATE/INSERT 完成时捕获重复键错误异常,这违反了约束。

【讨论】:

  • 只是想知道我是否没有数据库访问权限而不是我的逻辑是否正确?
  • 没有。不。它不是。
猜你喜欢
  • 2012-05-09
  • 2014-06-27
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2017-04-03
  • 2015-11-01
相关资源
最近更新 更多