<?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;
}?>一个事务中,多处查询,是否都需要行级锁锁住呢 最佳答案