tp 事务处理

tp的事务开启是非常简单的,

只需要M()->startTrans(); //开启事务,M()可以是M('xxx')
$m ->rollback(); //事务回滚
$m ->commit(); //提交事务
 
下面是我代码实例;
$order_model  = M( 'order' );
     $order_model  ->startTrans(); //开启事务
    $id  $order_model ->add( $data ); //增加一条订单记录
    if  (! $id ) {
         $result [ 'status' ] = false;
         $result [ 'info' ] =  '增加订单时出错了!' ;
         //如果增加失败,则回滚
         $order_model ->rollback();
         return  $result ;
     }
     //获取详细数据
     $detail  = get_detail( $id ); //获取订单详细信息
     $order_detail_model  = M( 'order_detail' );
     foreach  ( $detail  as  $k ) {
         if  (! $order_detail_model ->add( $k )) {
             //如果插入订单详细信息错误,则回滚
             $order_model ->rollback();
             $result [ 'status' ] = false;
             $result [ 'info' ] =  '处理详细信息时出错了!' ;
             return  $result ;
         };
     }
     //全部完成,则提交
     $order_model ->commit();
     $result [ 'status' ] = true;
     return  $result ;
}
 
mysql事务,数据表类型需要是innodb,只要在程序中开启一次就可以记录;
以我的理解,可以把事务看成一个监视器,开启事务就是开启监视器,然后
回滚的话,就中断了监视器,并且把监视到的内容返回去,比如下个订单,
下单成功,但是扣款失败,那么就会把下单成功的记录回滚回去,回到了没有下单时候的状态
提交事务,也就是关闭了监视器
当然,事务中断是不会终止程序运行的.它还会继续运行下去,所以得好好判断出错状态和回滚,提交位置

转载于:https://www.cnblogs.com/pansidong/p/7410486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值