zoukankan      html  css  js  c++  java
  • tp5 事务

    /**
       * 事务
       */
      public function transaction(){
    	Db::startTrans();
    	try{
    		Db::name('version')->where('id','1')->update(['version'=>1.1]);
    		Db::name('version')->where('id','2')->update(['versions'=>2]);
    		Db::name('version')->where('id','3')->update(['version'=>3.3]);
    		Db::name('version')->where('id','4')->update(['version'=>4.4]);  
    		echo 'try';
    		// 提交事务
    		Db::commit();
    		//$this->success('数据更新成功!');
    		dump('success');
    	} catch (Exception $e) {   
    		echo 'catch';
    		// 回滚事务
    		Db::rollback();
    		dump($e->getMessage());
    		//$this->error('数据更新错误' & $e->getMessage());
    	}
      }
    
    2、手动控制事务 (***)
    
    	// 开启事务
    	Db::startTrans();
    
    	// 事务
    	try{
    		// 删除数据id 31
    		$a=Db::table("user")->delete(31);
    		// 判断是否删除成功
    		if (!$a) {
    			Db::rollback();
    			throw new Exception("删除id 31 数据没有成功");
    		}
    		// 删除不存在的数据 id 32
    		$b=Db::table("user")->delete(32);
    		// 判断是否删除成功
    		if (!$b) {
    			Db::rollback();
    			throw new Exception("删除id 32 数据没有成功");
    		}
    		// 执行提交操作
    		Db::commit();
    	}catch(Exception $e){
    		// 回滚事务
    		Db::rollback();
    		// 获取提示信息
    		dump($e->getMessage());
    	}
    
    public function transaction()
    {
        $modelA = model('A');
        $modelA->startTrans();             // 开启事务A
        $result = $modelA->save($data1);
        if($result === false){
            $modelA->rollBack();        // 事务A回滚
            $this->error('添加A信息失败,请重试');
        }
      
        $modelB = model('B');
        $modelB->startTrans();             // 开启事务B
        $result = $modelB->save($data2);
        if($result === false){
            $modelB->rollBack();        // 事务B回滚
            $modelA->rollBack();        // 事务A回滚
            $this->error('添加B信息失败,请重试');
        }
      
        $modelC = model('C');
        $modelC->startTrans();             // 开启事务C
        $result = $modelC->save($data3);
        if($result === false){
            $modelC->rollBack();        // 事务C回滚
            $modelB->rollBack();        // 事务B回滚
            $modelA->rollBack();        // 事务A回滚
            $this->error('添加C信息失败,请重试');
        }
      
        // 提交事务
        $modelC->commit();
        $modelB->commit();
        $modelA->commit();
      
        $this->success('添加成功', url('admin/index/add'));
    }
    

    alter table 表名 engine=innodb;

    Db::startTrans();
    	try{
    	$res1=Db::name('version')->insert(['version'=>5.3]);
    	$res2=Db::name('version')->insert(['version'=>5.4]);
    	/*
    		这里需要抛出异常 才会执行回滚 
    		这个tp5的实例  Db类会自动抛出异常 所以不用判断 
    		最好的是加上判断
    	*/
    	if($res1 && $res2){
    		// 提交事务
    		Db::commit(); 
    		// 提示成功语句
    	}
    	} catch (Exception $e) {
    	// 回滚事务
    	Db::rollback();
    	dump($e->getMessage());
    	// 提示失败语句
    	}
    
  • 相关阅读:
    mysql中的enum型
    mysql中的时间year/date/time/datetime
    一些数字的属性
    mysql增删
    Perl6 Bailador框架(8):自定义400/500
    react: typescript jest && enzyme
    webstorm tslint配置
    react: typescript import images alias
    JSONP原理及简单实现
    纯css画三角形
  • 原文地址:https://www.cnblogs.com/jigr/p/15014548.html
Copyright © 2011-2022 走看看