十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
這篇文章將為大家詳細(xì)講解有關(guān)ThinkPHP5中的事務(wù)操作示例,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為高平企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),高平網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
使用事務(wù)處理的話,需要數(shù)據(jù)庫(kù)引擎支持事務(wù)處理。比如 MySQL 的 MyISAM 不支持事務(wù)處理,需要使用 InnoDB 引擎。
ThinkPHP5.0
使用transaction 方法操作數(shù)據(jù)庫(kù)事務(wù),當(dāng)發(fā)生異常會(huì)自動(dòng)回滾,例如:
自動(dòng)控制事務(wù)處理
Db::transaction(function(){
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);});也可以手動(dòng)控制事務(wù),例如:
// 啟動(dòng)事務(wù)Db::startTrans();try{
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
// 提交事務(wù)
Db::commit(); } catch (\Exception $e) {
// 回滾事務(wù)
Db::rollback();}ThinkPHP5.1
最簡(jiǎn)單的方式是使用 transaction 方法操作數(shù)據(jù)庫(kù)事務(wù),當(dāng)閉包中的代碼發(fā)生異常會(huì)自動(dòng)回滾,例如:
Db::transaction(function () {
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);});也可以手動(dòng)控制事務(wù),例如:
// 啟動(dòng)事務(wù)Db::startTrans();try {
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
// 提交事務(wù)
Db::commit();} catch (\Exception $e) {
// 回滾事務(wù)
Db::rollback();}注意在事務(wù)操作的時(shí)候,確保你的數(shù)據(jù)庫(kù)連接使用的是同一個(gè)。
V5.1.13+版本開(kāi)始,可以支持MySQL的XA事務(wù)用于實(shí)現(xiàn)全局(分布式)事務(wù),你可以使用:
Db::transactionXa(function () {
Db::connect('db1')->table('think_user')->delete(1);
Db::connect('db2')->table('think_user')->delete(1);}, [Db::connect('db1'),Db::connect('db2')]);要確保你的數(shù)據(jù)表引擎為InnoDB,并且開(kāi)啟XA事務(wù)支持。
關(guān)于“ThinkPHP5中的事務(wù)操作示例”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。