thinkphp3.2 事务处理加锁

浏览:9517 发布日期:2018/05/23 分类:用法示例 关键字: tp3.2 加锁
首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: $user_mod->lock(true)->where('id=1')->select();这个地方用锁查询,其次地方如果查询这个user对象需要防止同时操作的话也要进行加锁,就是也要用lock(true)这种方式查询:
代码示例如下:

                // 事务处理 派单表(主表)
        $model = M('sendorders');
        $model->startTrans();  // 开启事务
        $user = $model->lock(true)->where(array('id'=>$sendid))->getField('orderstate');

        if( $user === '1' || $user === '5' ){

            // 修改 派单表(主表) 抢单状态、司机id
            $model->where(array('id'=>$sendid))->save(array('orderstate'=>'2','driveid'=>$userid));
                        
            // 修改  派单表(副本)抢单成功,司机的接单状态
            $Model_up = new \Think\Model(); // 实例化一个model对象 没有对应任何数据表
            $Model_up->execute("UPDATE db_orders,db_driver SET db_orders.state = '2',db_driver.condition = '2' WHERE db_orders.sendid = '$sendid' AND db_orders.userid = '$userid' AND db_driver.id = '$userid' ");
                        
            $model->commit();  // 开启事务            
            echo  json_encode(['code'=>200,'message'=>'成功']);
                    
        }else{
                    
            $model->rollback();  // 回滚
            echo  json_encode(['code' => 311, 'message' => '已被接单了!!']);die;
        }
评论( 相关
后面还有条评论,点击查看>>