程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> thinkphp 的事務回滾處理 和 原始PHP的事務回滾實例,thinkphp實例

thinkphp 的事務回滾處理 和 原始PHP的事務回滾實例,thinkphp實例

編輯:關於PHP編程

thinkphp 的事務回滾處理 和 原始PHP的事務回滾實例,thinkphp實例


1.  要程序裡面支持事務,首先連接的數據庫和數據表必須支持事務 mysql   為例:

數據庫InnoDB支持 transactions

 

數據表支持事務:InnoDB  支持transaction

2. 框架thinkphp  支持事務代碼

public function testrollback(){
$model1 = D('item');
$model2 = D('vote');
$model1->startTrans();
$res1 = $model1->where('id = 5')->delete();
$res2 = $model2->where('id = 2')->delete();
dump($res1);
dump($res2);
if($res1 && $res2){
$model1->commit();   //只有$res1 和  $res2  都執行成功是才真正執行上面的數據庫操作
dump("commit");
}else{
$model1->rollback();  //  條件不滿足,回滾
dump("rollback");
}
dump("over");
exit;
}

 

 

 

3.  原始PHP 代碼事務實例

方法一:只支持數據庫和數據表都是 innoDB  的情況

public function  rollbackoriginal1(){
        $conn = mysql_connect('127.0.0.1','summerzi','summerzi') or die('DB connection failed!');
        mysql_select_db('summer',$conn);
        mysql_query('set names "GBK"');
        mysql_query('BEGIN');
        $sql1 = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(41,1,233);";
        $sql2 = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(fdfd,2,235);";
        $res1 = mysql_query($sql1);
        $res2  = mysql_query($sql2);
        dump($sql1);
        dump($sql2);
        dump($res1);
        dump($res2);
        if($res1 && $res2){
            mysql_query('COMMIT');
            dump('commit success!');
        }else{
            mysql_query('ROLLBACK');
            dump('commit failed, rollback!');
        }
        mysql_query('END');

    }

方法二:(注意:對於不支持事務的MyISAM引擎數據庫可以使用表鎖定的方法)

public function rollbackoriginal2(){
        $conn = mysql_connect('127.0.0.1','summerzi','summerzi') or die('DB connection failed!');
        mysql_select_db('summer',$conn);
        mysql_query('set names "GBK"');
        mysql_query('SET AUTOCOMMIT=0');////設置mysql不自動提交,需自行用commit語句提交
        $sql1 = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(41,1,233);";
        $sql2 = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(44,2,235);";
        //mysql_query("LOCK TABLES `hmbl_userdata` WRITE");//鎖定表
        $res1 = mysql_query($sql1);
        $res2  = mysql_query($sql2);
        dump($sql1);
        dump($sql2);
        dump($res1);
        dump($res2);
        //mysql_query("UNLOCK TABLES");//解除鎖定
        if($res1 && $res2){
            mysql_query('COMMIT');
            dump('commit success!');
        }else{
            mysql_query('ROLLBACK');
            dump('commit failed, rollback!');
        }
        mysql_query("SET AUTOCOMMIT=1");
        mysql_query('END');
        

    }

php + mysql  對事務的處理比較簡單,涉及到業務中多個數據操作,就可以考慮用事務處理

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved