thinkphp5事务请教
Db::startTrans();try {
$user = Db::query("select * from px_user where account = ?",[$account]);;
if($user){
return MyUtil::jsonResult(1,"注册失败,账号已存在",null);
}else{
Db::execute("insert into px_user() value(:user_id,:name,:account,:password,:create_time,:update_time,:icon)",$data);
Db::execute("insert into px_take_a_shot() value(9,?,?)",);
// 提交事务
Db::commit();
return MyUtil::jsonResult(0,"注册成功",$data);
}
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return MyUtil::jsonResult(1,"错误",$data);
}
如代码 其中注册失败是直接return的 事务并没有提交 会有影响吗? 你可以换一种写法。有问题就throw出来,这样都是走catch,就不需要考虑这个问题了
Db::startTrans();
try {
$user = Db::query("select * from px_user where account = ?",[$account]);;
if($user){
throw new Exception("注册失败,账号已存在");
}
Db::execute("insert into px_user() value(:user_id,:name,:account,:password,:create_time,:update_time,:icon)",$data);
Db::execute("insert into px_take_a_shot() value(9,?,?)",);
// 提交事务
Db::commit();
return MyUtil::jsonResult(0,"注册成功",$data);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return MyUtil::jsonResult(1,$e->getMessage(),$data);
} 其实直接return是可以的,如果throw 不好返回前端 这里的查询并不需要开启事务。 throw 是可以自定义 自定义throw,然后出现问题直接抛出throw ,传给throw错误码和信息 ,就相当于返回个接口异常
页:
[1]