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 01 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
php中将一个对象保存到Session中的方法
Mar 13 PHP
php获取远程文件的内容和大小
Nov 03 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
Nov 29 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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
2021年最新CPU天梯图
2021/03/04 数码科技
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
打架检讨书300字
2014/02/02 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
计算机专业职业规划
2014/02/28 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
教师一帮一活动总结
2014/07/08 职场文书
给老师的一封感谢信
2015/01/20 职场文书
护士求职简历自我评价
2015/03/10 职场文书
复兴之路观后感
2015/06/02 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang