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读取目录下所有文件的代码
Jan 07 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
php检测图片主要颜色的方法
Jul 01 PHP
PHP数组函数知识汇总
May 12 PHP
PHP串行化与反串行化实例分析
Dec 27 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
php实现微信支付之现金红包
May 30 PHP
PHP中rename()函数的妙用讲解
Feb 28 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
ajax php 实现写入数据库
2009/09/02 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
javascript判断office版本示例
2014/04/11 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
python协程用法实例分析
2015/06/04 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
Python pip 常用命令汇总
2020/10/19 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
计算机专业毕业生的自我评价
2013/11/18 职场文书
企业统计员岗位职责
2013/12/13 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
个人工作表现评语
2014/04/30 职场文书
植树造林的宣传标语
2014/06/23 职场文书
学生安全责任书模板
2014/07/25 职场文书
弄虚作假心得体会
2014/09/10 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js