thinkphp3的事务处理
$trans = M();
$trans->startTrans(); // 开启事务
if (empty($err_message)) {
try { // 异常处理
foreach ($data as $d2) {
$auth = M('m_xtxl_cy')->add($xt_cy);
$add_count++;
if(empty($auth)){
$auth_all = false;
}
}
} catch (\Exception $ex) { //命名空间需要\
$auth_all = false;
$err_message .= '未知的异常数据!';
}
}
if (empty($auth_all) || !empty($err_message)) {
$trans->rollback();
$json_result['status'] = 0;
$json_result['message'] = '本次导入失败:' . $err_message;
} else {
$trans->commit();
$json_result['status'] = 1;
$json_result['message'] = '导入成功!本次操作新增数据:'.$add_count.'条。';
}
关于事务的不提交和回滚,摘自网络:
在同一事务条件下,回滚和不提交,表现是一样的
但是还有些差别
事务处理,是将操作事件交给数据库(模拟)运行,直到commit操作,才使得修改实际产生效果,你可以看做是未提交事务都是处于一个临时库中进行
回滚是对于同一个事务,如果产生了错误,那么取消这个临时库中的操作,不对实际数据产生影响
最主要的区别在于,如果不回滚,这些临时操作会持续到这个个connection结束为止,也就是虽然你看不到,但是临时库的操作依然存在,而回滚是即时生效,其实都是回滚了,只是时间点的不一样