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 addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
详解js异步文件加载器
Jan 24 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
php mysql 封装类实例代码
Sep 18 PHP
php smtp实现发送邮件功能
Jun 22 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP实现的数组和XML文件相互转换功能示例
Mar 15 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数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
vue写一个组件
2018/04/09 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
mac系统安装Python3初体验
2018/01/02 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
Python-接口开发入门解析
2019/08/01 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
python tkinter实现连连看游戏
2020/11/16 Python
Python之Sklearn使用入门教程
2021/02/19 Python
美国电视购物HSN官网:HSN
2016/09/07 全球购物
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
什么是继承
2013/12/07 面试题
暑期实践思想汇报
2014/01/06 职场文书
情人节寄语大全
2014/04/11 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
高三学生评语大全
2014/04/25 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA