tp5中的事务处理

使用事务首先要数据库支持事务;

如下MySQL数据库user表开启事务支持,即设计表->引擎设置为InnoDB->保存

php 复制代码
事务处理
1. 数据库的表引擎需要是 InnoDB 才可以使用,如果不是调整即可;
2. 事务处理,需要执行多个 SQL 查询,数据是关联恒定的;
3. 如果成功一条查询,改变了数据,而后一条失败,则前面的数据回滚;
4. 比如:蜡笔小新给路飞 3 快钱,自己-3,对方+3,这时需要事务处理;
5. 系统提供了两种事务处理的方式,第一种是自动处理,出错自动回滚;
Db::transaction(function () {
	Db::name('user')->where('id', 19)->save(['price'=>Db::raw('price - 3')]);
	Db::name('user1')->where('id', 20)->save(['price'=>Db::raw('price + 3')]);
});
=========事务回调函数内部给外部变量赋值=======方便操作后根据结果做判断
public function trans(){
    $res1=0;
    $res2=0;
    $res=[];
    Db::transaction(function ()use(&$res,&$res1,&$res2){
        $res1=Db::table('user')->where(['name'=>'qc'])->setDec('age',2);
        $res2=Db::table('user')->where(['name'=>'qzy'])->setInc('age',2);
        $res=Db::table('user')->where(['name'=>'qc'])->find();
    });
    if($res1&$res2){
        dump($res1);
        dump($res2);
        dump($res);
    }

    return 123;
}

6. 手动处理,基本和原生处理类似,可以自行输出错误信息;
//启动事务
Db::startTrans();
try {
	Db::name('user')->where('id', 19)->save(['price'=>Db::raw('price - 3')]);
	Db::name('user1')->where('id', 20)->save(['price'=>Db::raw('price + 3')]);
	//提交事务
	Db::commit();
} catch (\Exception $e) {
	echo '执行 SQL 失败!';
	//回滚
	Db::rollback();
}
相关推荐
AC赳赳老秦1 小时前
企业级合规审计体系:用 OpenClaw 落地采集全链路留痕,自动生成合规审计报告
java·python·django·beautifulsoup·php·deepseek·openclaw
郑州光合科技余经理5 小时前
海外版外卖系统架构:订单怎么流转、权限怎么分
java·开发语言·前端·系统架构·uni-app·php·ai编程
PHP实战开发录6 小时前
企业微信客户标签同步冲突排查记录
mysql·系统安全·php·企业微信·开发
FYKJ_20106 小时前
springboot网上购书商城---附源码15749
java·spring boot·后端·python·spark·django·php
程序猿_极客7 小时前
【免费】分享一套优质的基于Php的动漫网站系统、动漫分享网站系统
php·php+mysql·动漫网站系统
小义_8 小时前
Linux 性能排查实战
linux·服务器·php
宋拾壹10 小时前
php对接携程验票核销
android·php·android studio
catchadmin21 小时前
NativePHP v4 让 Blade 构建原生 iOS 与 Android 界面
android·ios·ai·php
Sagittarius_A*1 天前
Burst Lab | PHP 审计 13|反序列化(三):POP 链构造与 Gadget Chain 分析
开发语言·web安全·php·代码审计·反序列化
蓝速科技1 天前
蓝速科技丨新旧楼宇混杂场景下会议室预约门牌屏一体化改造方案
开发语言·科技·php