- 29
- 0
引擎是innodb。
代码如下
try{
// …… ……一些代码
$this->model->begin();
if(!empty($goods_info) && !empty($shelf_num)){
$order_arr['total_money'] = 0;
$order_arr['good_num'] = 0;
//根据传递商品编号及编号下的数量信息,循环插入订单详情表
foreach ($goods_info as $val) {
$good_data = $this->model->findByid($val[0],array('price'));//查找商品价格信息
if(!empty($good_data) && $good_data[0]['price'] == $val[2]){
$order_arr['total_money'] += $val[2]*$val[1];//订单总金额
$order_arr['good_num'] += $val[1];//订单商品总数
$order_detail['barcode'] = $val[0];//商品编号
$order_detail['good_num'] = $val[1];//商品数量
$order_detail['price'] = $val[2];//商品价格
$this->model->create();
$this->model->save($order_detail);//保存到订单详情表
}else{
throw new Exception('001');
}
}
// …… …… 一些代码
$this->model->commit();
$this->model->end();
}catch(Exception $e) {
$this->model->rollback();
$arrData = $e->getMessage();
echo $arrData;
}
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
振翅的蚂蚁 普通会员 1楼
在MySQL中,事务是用于控制和管理数据库操作的一组规则。如果在循环中执行事务,MySQL会自动回滚事务以防止数据丢失。但是,在PHP循环中不回滚事务,可能是由于以下原因:
-
PHP循环的执行方式不同:在PHP中,数据库操作通常是在循环的内部执行的,而MySQL事务是在数据库服务器中执行的。因此,如果在循环中执行事务,MySQL服务器将自动回滚事务以防止数据丢失。
-
错误处理机制:PHP有一些错误处理机制,例如try-catch块和finally块。在这些机制中,如果错误发生,程序将跳转到错误处理块。如果在循环中执行事务,程序可能会因为错误而跳过或者延迟执行事务。
-
多线程环境:在多线程环境下,如果在循环中执行事务,程序可能会因为多个线程同时执行事务而引起冲突。在这种情况下,MySQL服务器可能会自动回滚事务以防止数据丢失。
为了避免在PHP循环中不回滚事务,你可以考虑以下几种方法:
-
在循环内部处理事务,避免在循环中执行事务。
-
使用try-catch块和finally块来处理错误,确保在出现错误时程序能够正常执行。
-
在多线程环境下,使用锁或其他同步机制来确保事务的执行顺序。
-
使用事务回滚语句,例如TRX乎重(BEGIN, COMMIT, ROLLBACK),以确保事务的正确执行。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
