分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

PHP使用PDO进行事务处理

发布时间:2023-09-06 01:35责任编辑:苏小强关键词:PHP

1.PDO执行SQL语句

  exec()执行一条SQL语句,返回影响行数。

  query()执行一条SQL语句,发挥结果集,结果集是一个PDOStatement对象。

2.什么是事务

  事务就是将多条SQL语句看成一个整体,只要其中有一条语句执行异常,那么所有语句都不能执行,数据库要返回执行第一条语句之前的状态。

  假设一个实例,A要向B转账100元。那么这个事务分为两条SQL语句,A的账户减去100元,B的账户增加100元。这两条语句只要有一条不能执行,那么这个事务就不能被执行。

  为了详细演示这个事务,首先要创建一张表。

<?php ???$dsn="mysql:host=127.0.0.1;dbname=example"; ???$user="root"; ???$password=‘‘; ???try ???{ ???????$pdo=new PDO($dsn,$user,$password); ???????$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); ???????$sql="CREATE TABLE account( ???????????????id INT(3) PRIMARY KEY AUTO_INCREMENT, ???????????????user VARCHAR(10) NOT NULL, ???????????????money INT(10) UNSIGNED NOT NULL);"; ???????$pdo->exec($sql); ???} ???catch(PDOException $e) ???{ ???????echo $e->getMessage(); ???} ????>

   插入两条数据

<?php ???$dsn="mysql:host=127.0.0.1;dbname=example"; ???$user="root"; ???$password=‘‘; ???try ???{ ???????$pdo=new PDO($dsn,$user,$password); ???????$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); ???????$sql="INSERT INTO account VALUES ???????(NULL,‘A‘,200), ???????(null,‘B‘,300);"; ???????$pdo->exec($sql); ???} ???catch(PDOException $e) ???{ ???????echo $e->getMessage(); ???} ????>

  下面开始演示事务,

  在数据库中默认的模式是自动提交,即使出现问题也是没有办法回滚的。所以首先要使用

$pdo->setAttribute(PDO::AUTOCOMMIT,0);

  关闭自动提交,这样一来当出现问题时,就可以使用

$pdo->rollback();

  进行回滚,修复操作。

  除此之外还要告诉数据库开始事务,表示接下来的SQL语句是一个事务整体使用

$pdo->beginTransaction();

   之前已经把自动提交关闭了,所以事务完毕之后,应该用

$pdo->commit();

   下面我们要开始执行事务了

 1 <?php 2 ????$dsn="mysql:host=127.0.0.1;dbname=example"; 3 ????$user="root"; 4 ????$password=‘‘; 5 ????try 6 ????{ 7 ????????$pdo=new PDO($dsn,$user,$password); 8 ????????$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 9 ????????$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);10 11 ????????$pdo->beginTransaction();//开启事务12 13 ????????$affected_row=$pdo->exec(‘UPDATE account SET money=money-100 WHERE user="A" ‘);14 15 ????????$affected_row=$pdo->exec(‘UPDATE account SET money=money+100 WHERE user="B" ‘);16 17 ????????/*如果执行出问题会去异常处理部分进行回滚,撤销事务中所有操作*/18 19 ????????$pdo->commit();//提交20 ????????echo "交易成功";21 ????}22 ????catch(PDOException $e)23 ????{24 ????????echo $e->getMessage();25 ????????$pdo->rollback();//回滚,撤销操作26 ????????echo "交易失败";27 ????}28 ????$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);//别忘了事务完成后开启自动提交29 ?>

  这段脚本如果执行第三次会出错,提示交易失败,因为执行第三次是A的账户里已经没有100元了。

PHP使用PDO进行事务处理

原文地址:https://www.cnblogs.com/patermenkey/p/8270733.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved