关于thinkphp连贯操作加锁的问题

浏览:712 发布日期:2019/02/26 分类:求助交流
<?php
function indata($arr)
    {
        Db::startTrans();
        $nt=array();
        $money=0;
        $out="";
        $orderid="";
        $up_id=0;
        $list=Db::name('Channel')->field('id,uid,cid,title,poundage,type,money')->lock(true)->where(array('uid'=>$arr['uid'],'deapi'=>1))->find(); //行锁
        $money=$arr['amount'] + $list['poundage'];        
        $ulist=Db::name('Upstream')->lock(true)->where("status=1 and money>{$money} and cid={$list['cid']}")->order("id desc")->limit(1)->find(); //多个查询是否也需要行锁??
        if(empty($ulist))
        {//如果没有符合的
           return json_encode(array('status'=>'1016','message'=>'交易请求已提交,但渠道未受理该请求,创建交易失败!')); 
        }else{
          try{
           $result=Db::name('Channel')->where("uid={$arr['uid']} and deapi=1 and money>={$money}")->update([
             'money'=>Db::raw("money-{$money}"),
             ]);
             $orderid=getorderid('daifu');
             $ip=Getip();
             if($result==1){
                 /*
                 *这里进行入库操作
                 */
                $nt=''; //这里从数据库中读取需要的资料
             }
           Db::commit();// 提交事务
          }catch (\Exception $e) {
            Db::rollback();// 回滚事务            
            return json_encode(array('status'=>'1016','message'=>'交易请求已提交,但渠道未受理该请求,创建交易失败!')); 
          }
          if(empty($nt)){
              $out=json_encode(array('status'=>'1015','message'=>'帐户余额不足,创建交易失败!'));
          }else{
              /*
              *这里进行数据库更新操作
              */
            $out=json_encode(array('status'=>'1001','message'=>'信息已成功提交并开始受理','orderid'=>$orderid,'amount'=>$arr['amount']));
          }
        }
        return $out;
    }?>
一个事务中,多处查询,是否都需要行级锁锁住呢
最佳答案
评论( 相关
后面还有条评论,点击查看>>