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与SQL注入攻击[二]
Apr 17 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
Nov 20 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
php头像上传预览实例代码
May 02 PHP
自制PHP框架之路由与控制器
May 07 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
简单的php购物车代码
2020/06/05 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python简单实现刷新智联简历
2016/03/30 Python
利用Python开发实现简单的记事本
2016/11/15 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
食堂个人先进事迹
2014/01/22 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
离婚起诉书范本
2015/05/18 职场文书
css3应用示例:新增的选择器
2022/03/16 HTML / CSS