怎么在PHP中处理PDO事务

  介绍

怎么在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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

怎么在PHP中处理PDO事务