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静态新闻列表自动生成代码
Jun 14 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
ThinkPHP模板判断输出Empty标签用法详解
Jun 30 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
Nov 18 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
thinkPHP批量删除的实现方法分析
Nov 09 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
PHP生成图表pChart的示例解析
Jul 31 PHP
php中try catch捕获异常实例详解
Aug 06 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
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
Python print不能立即打印的解决方式
2020/02/19 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
实习生体会的自我评价范文
2013/11/28 职场文书
安全生产承诺书
2014/03/26 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
教学质量月活动总结
2015/05/11 职场文书
毕业生入职感言
2015/07/31 职场文书
MySQL分库分表详情
2021/09/25 MySQL