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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
PHP防注入安全代码
Apr 09 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
学习PHP的数组总结【经验】
May 05 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
php微信开发之关注事件
Jun 14 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 PHP
关于laravel框架中的常用目录路径函数
Oct 23 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 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
PHPlet在Windows下的安装
2006/10/09 PHP
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
vue ssr 指南详读
2018/06/29 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
python tkinter基本属性详解
2019/09/16 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
总经理助理的八要求
2013/11/12 职场文书
打架检讨书400字
2014/01/17 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
初中同学聚会感言
2014/02/11 职场文书
个人银行贷款担保书
2014/04/01 职场文书
私人委托书格式
2014/09/10 职场文书