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 相关文章推荐
15种PHP Encoder的比较
Apr 17 PHP
php 中文和编码判断代码
May 16 PHP
PHP UTF8中文字符截断函数代码
Sep 11 PHP
dedecms中使用php语句指南
Nov 13 PHP
php计算一个文件大小的方法
Mar 30 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
有关PHP 中 config.m4 的探索
Aug 26 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批量更改数据库表前缀实现方法
2013/10/26 PHP
php实现httpclient类示例
2014/04/08 PHP
smarty模板数学运算示例
2016/12/11 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
js 文本滚动效果的实例代码
2013/08/17 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python实现爬取逐浪小说的方法
2015/07/07 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python3爬虫怎样构建请求header
2018/12/23 Python
基于PyTorch中view的用法说明
2021/03/03 Python
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
学校办公室主任职责
2013/12/27 职场文书
社团文化节邀请函
2014/01/10 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
音乐教师求职信范文
2015/03/20 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python