php实现基于pdo的事务处理方法示例


Posted in PHP onJuly 21, 2017

本文实例讲述了php实现基于pdo的事务处理方法。分享给大家供大家参考,具体如下:

实例1:

try {} catch () {} 形式

<?php
$dsn = 'mysql:dbname=cheyun_cms;host=127.0.0.1';
$user = 'root';
$password = '111111';
//采用预处理+事务处理执行SQL操作
//1.连接数据库
try {
  $pdo = new PDO($dsn, $user, $password);
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
  die("数据库连接失败".$e->getMessage());
}
//2.执行数据操作
try{
  //开启事物,此时会关闭自动提交
  $pdo->beginTransaction();
  $sql = "insert into cy_log (logid, value, action, file) values (?, ?, ?, ?)";
  $stmt = $pdo->prepare($sql);
  //传入参数
  $stmt->execute(array(null,"test4","w",11));
  $stmt->execute(array(null,"test5","w",11));
  $stmt->execute(array(null,"test3","w",11));
  //提交事物,并且 数据库连接返回到自动提交模式
  $pdo->commit();
}catch(PDOException $e){
  echo '执行失败'.$e->getMessage();
  //如果数据库被设置成自动提交模式,rollback 在回滚事务之后将恢复自动提交模式。
  //包括 MySQL 在内的一些数据库, 当在一个事务内有类似删除或创建数据表等 DLL 语句时,会自动导致一个隐式地提交。
  //隐式地提交将无法回滚此事务范围内的任何更改。即 DDL 语句无法回滚
  $pdo->rollback();
}

实例2:

if…else…形式

<?php
$dsn = 'mysql:dbname=cheyun_cms;host=127.0.0.1';
$user = 'root';
$password = '111111';
//采用预处理+事务处理执行SQL操作
//1.连接数据库
try {
  $pdo = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
  die("数据库连接失败".$e->getMessage());
}
//2.执行数据操作
//开启事物
$pdo->beginTransaction();
$sql = "insert into cy_log (logid, value, action, file) values (?, ?, ?, ?)";
$stmt = $pdo->prepare($sql);
$datalist = array(
  array(null,"test9","w",11),
  array(null,"test10","w",11),
  array(null,"test11","w",11)
);
//是否提交标志位
$isCommit = true;
foreach($datalist as $data){
  $stmt->execute($data);
  if($stmt->errorCode()>0){
    //回滚
    $pdo->rollback();
    $isCommit = false;
    break;
  }
}
if($isCommit){
  //提交事物
  $pdo->commit();
}

注意:

数据表需要 InnoDB 类型

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
linux下实现定时执行php脚本
Feb 13 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
Laravel学习基础之migrate的使用教程
Oct 11 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
php的优点总结 php有哪些优点
Jul 19 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 PHP
php基于自定义函数记录log日志方法
Jul 21 #PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 #PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 #PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 #PHP
php检测mysql表是否存在的方法小结
Jul 20 #PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 #PHP
php脚本守护进程原理与实现方法详解
Jul 20 #PHP
You might like
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
JS实现点击下载的小例子
2013/07/10 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
vue实现评价星星功能
2020/06/30 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
遗传算法python版
2018/03/19 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
python画折线图的程序
2018/07/26 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
公务员诚信承诺书
2014/05/26 职场文书
反对邪教标语
2014/06/30 职场文书
市场部岗位职责
2015/02/12 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书