使用事務之前,先確保數據庫的存儲引擎支持事務操作。
- MyISAM:不支持事務,主要用於讀數據提高性能
- InnoDB:支持事務、行級鎖和並發
- Berkeley DB:支持事務
ThinkPHP5 使用事務有 3 個常用方法:
$model->startTrans(); // 開啟事務 $model->rollback(); // 事務回滾 $model->commit(); // 提交事務
小例子:
<?php
/**
* 事務測試
*/
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'));
}
參考鏈接:tp3模型的事務支持:TP模型---事務支持
