点击注册按钮,执行以下代码:
//开启事务
DB::beginTransaction();
try{
if(DB::table('user')->where('email',$email)->exists()){ //如果邮箱已存在,返回错误
DB::rollBack();
return 0;
}
//提交到数据库
DB::table('user')->insert($param);
DB::commit();
return 1;
}catch (Throwable $e){
DB::rollBack();
return 0;
}
看似很简单的逻辑,但实际使用上,如果点“注册”按钮,点击快了,会出现下图这种情况,重复的邮箱跳过了验证,直接插入到数据库了。
一般这种问题该如何解决?
由于业务需要,还不能给email设置唯一索引,在业务层有方案解决吗
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…