1. 程式人生 > >ThinkPHP資料庫驅動之mysql事物回滾

ThinkPHP資料庫驅動之mysql事物回滾

很簡單的一個事物回滾,簡單介紹下事物回滾,示例怎麼使用Thinkphp的回滾。下面上倆個由淺入深的例子。會給你幫助理解,和提升。
//具體的講解請允許我把它放在了 http://www.ichasem.com/?p=331 這裡
1、開啟事務方法 startTrans()
2、事務提交方法 commit()
3、事務回滾方法 rollback()
用法例子::

$order = M(‘order’);
$allAdded = true; //先設定一個值為 true;
$data['name'] = 'winter';
$order->startTrans(); //開啟事物
for($i = 1;$i<3;$i++){ 
    $sign = $order->add($data); //新增一條資料到order表
    if(!$sign){
        $order->rollback(); //如果order新增失敗事物回滾
        $allAdded = false; //並且把allAdded設定為 false
    }
}
//回滾
if($allAdded){
    $order->commit(); 
    // 如果allAdded為真則兩條資料都成功;那麼 commit事物提交
    echo '新增成功';
}else{
    echo '新增失敗';
}

小解析:如果commit了。那麼就提交插入資料。如果發現alladded為假說明有條資料沒插入正確。那麼就rollback回滾就會取消事物開啟之後操作資料庫的所有行為。
winter在提供一個例子助於大家加深理解~

public function insertdata(){
    $model = M();
    $model->startTrans();
    $data['name'] = 'winter';
	//增加一條使用者資訊
    $si = $model->table(C('DB_PREFIX').'user')->add($data);
    if(!$si){
        $model->rollback();
        exit();
    }
    $car['brand'] = $si;
	//增加一條使用者id
    $c = $model->table(C('DB_PREFIX').'car')->add($car);
    if($si && $c){
        $model->commit();
    }else{
        $model->rollback();
    }
}

原文地址:http://www.thinkphp.cn/code/1643.html