如何在 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
违反约束时捕获重复键错误异常。
检查重复的“用户名”字段
个案:
如果用户想要更新用户名字段以外的记录(如名字或其他),我使用简单的 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
违反约束时捕获重复键错误异常。