怎么在PHP中处理PDO事务?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>概要:强>
将多条sql操作(增删改)作为一个操作单元,要么都成功,要么都失败。
单条数据不用事务处理
被操作的表必须是innoDB类型的表(支持事务)
MySQL常用的表类型:MyISAM(非事务)增删改速度快,innoDB(事务型)的安全性高
更改表的类型为innoDB类型
mysql>, alter table stu 引擎=innoDB;
<强>使用:强>
在PDO预处理的基础上添加,如下格式:
{试 m美元→beginTransaction();//开启事务处理//PDO预处理以及执行语句… m美元→commit();//提交事务 }捕捉(PDOException $ e) { m美元→rollBack();//事务回滚//相关错误处理 }
<>强示例:强>
m 美元;=,new PDO (dsn,用户,美元$ pwd); m美元→setAttribute (PDO:: ATTR_ERRMODE, PDO:: ERRMODE_EXCEPTION); 尝试{ m美元→beginTransaction();//开启事务处理=$ m美元支撑→准备(“insert  into 斯图(姓名、性别、年龄、classid)值(?,?,?,?)“); $ data=https://www.yisu.com/zixun/array ( 阵列(user1, 1, 22日“lamp76”), 20岁的阵列(“user2”, 1“lamp76”), 阵列(“user3”, 0, 22日“lamp76”) ); foreach(数据作为美元v) { ->执行(v)美元美元支撑; echo $ m -> lastInsertId (); } $ m -> commit (); 回声”提交成功!”; }捕捉(PDOException $ e) { $ m -> rollBack();//回滚 死亡(“提交失败!”); }
<>强补充:再来一个php使用PDO的mysql事务处理与回滚操作实例分析强>
<强>概述:强>
事务(事务)是由查询和/或更新语句的序列组成。用开始,开始交易
开始一个事务,滚回滚事务,提交提交事务。在开始一个事务后,可以有若干个SQL查询或更新语句,每个SQL
递交执行后,还应该有判断是否正确执行的语句,以确定下一步是否回滚,若都被正确执行则最后提交事务。
事务一旦回滚,数据库则保持开始事务前状态。就好象一个被编辑的文件不存盘退出,自然还是保持文件原来的样子。
所以,事务可被视为原子操作,事务中的SQL,要么全部执行,要不一句都不执行。
<强> php中PDO的mysql事务处理步骤:强>
①。关闭自动提交
②。开启事务处理
③。有异常就自动抛出异常提示再回滚
④。开启自动提交
<强>注意:强>
mysql只有这个InnoDB驱动是支持事务处理的,默认MyIsAM驱动不支持。
<>强实例:强>
& lt; php ? 尝试{//最后是关闭自动提交 pdo美元=new pdo (“mysql:主机=localhost; dbname=mydb",“root",“root",,数组(pdo:: ATTR_AUTOCOMMIT=祝辞;0));//这个是通过设置属性方法进行关闭自动提交和上面的功能一样//美元pdo→setAttribute (pdo:: ATTR_AUTOCOMMIT,, 0);//开启异常处理 pdo→美元setAttribute (pdo:: ATTR_ERRMODE, pdo: ERRMODE_EXCEPTION); }捕捉(PDOException $ e) { echo “数据库连接失败:“。e→美元getMessage (); 退出; }/* *,事务处理 * *,张三从李四那里买了一台,2000,元的电脑 *,从张三帐号中扣出,2000元 *,向李四账号中加入,2000元 *,从商品表中减少一台电脑 *,MyIsAM InnoDB */尝试{ pdo→美元beginTransaction();//开启事务处理 美元价格=500; $ sql=皍pdate zhanghao  set 价格=价格-{$的价格},where id=1“;; affected_rows=pdo→美元exec ($ sql); 如果affected_rows美元(!) throw new  PDOException(“张三转出失败“);//那个错误抛出异常 $ sql=皍pdate zhanghao  set 价格=价格+{$的价格},where id=3“;; affected_rows=pdo→美元exec ($ sql); 如果affected_rows美元(!) throw new  PDOException(“向李四转入失败“); echo “交易成功!“; pdo→美元commit();//交易成功就提交 }捕捉(PDOException $ e) { echo $ e→getMessage (); pdo→美元rollback (); }//自动提交,如果最后不自动提交,转账是不成功的 pdo→美元setAttribute (pdo:: ATTR_AUTOCOMMIT, 1);//设置错误报告模式,ERRMODE_SILENT ERRMODE_WARNING
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。