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();
}
相关推荐
manageengine1 小时前
PHP2Shell 事件复盘:企业应该如何自查、修复与规模化处置
运维·安全·php
用户235937172631 小时前
扫码点餐系统的三个工程问题:桌台绑定、订单状态机与打印可靠投递
程序员·php
小胡20242 小时前
DzzOffice V2.4.2 版本上线!安全加固 × 网盘体验全面升级
服务器·bootstrap·php·协同办公·dzzoffice
龙孚信息3 小时前
跨境电商独立站的安全盲区:一次 PHP 核心漏洞的影响评估
开发语言·安全·php
sunsijia219833 小时前
2026年10月22日 PHP漏洞临时处理
开发语言·php
凯丨4 小时前
PHP2Shell(CVE-2026-109618 / CVE-2026-109619)——配置层缓解方案
php
小白旗5 小时前
PHP 严重漏洞风险提醒:如何排查运行环境并做好安全更新
开发语言·php
wdfk_prog5 小时前
lwip教程 31:SLIP vs PPPoS——串口 IP Framing、错误检测、协商与工程边界
网络协议·tcp/ip·php
vipxieliang5 小时前
ThinkPHP MVC 模式入门:从控制器到视图的完整实践
后端·php·thinkphp
Kimi-学长6 小时前
PHP 爆出两个高危安全漏洞!CVE-2026-109618、CVE-2026-109619 修复方案与防护指南
开发语言·php