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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
php知道与问问的采集插件代码
Oct 12 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
php实现可逆加密的方法
Aug 11 PHP
php文件上传你必须知道的几点
Oct 20 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
php创建类并调用的实例方法
Sep 25 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 PHP
WordPress伪静态规则设置代码实例
Dec 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
php表单转换textarea换行符的方法
2010/09/10 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
2020/09/22 Javascript
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
Python切图九宫格的实现方法
2019/10/10 Python
Python argparse模块使用方法解析
2020/02/20 Python
Django操作session 的方法
2020/03/09 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
怎样创建、运行java程序
2014/08/01 面试题
会计专业毕业生自荐信范文
2013/12/20 职场文书
自我鉴定怎么写
2014/01/12 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
教师个人剖析材料
2014/02/05 职场文书
建筑安全标语
2014/06/07 职场文书
维稳工作情况汇报
2014/10/27 职场文书
求职信格式范文
2015/03/19 职场文书
跑吧孩子观后感
2015/06/10 职场文书
Python打包为exe详细教程
2021/05/18 Python
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电