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脚本的10个技巧(6)
Oct 09 PHP
用文本文件制作留言板提示(上)
Oct 09 PHP
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
php 全局变量范围分析
Aug 07 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
java微信开发之上传下载多媒体文件
Jun 24 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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完整的日历类(CLASS)
2006/11/27 PHP
php实现分页工具类分享
2014/01/09 PHP
PHP内核探索之变量
2015/12/22 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
img标签中onerror用法
2009/08/13 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
js面向对象编程总结
2017/02/16 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
python为什么会环境变量设置不成功
2020/06/23 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
大学生实习鉴定评语
2014/04/25 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
施工员岗位职责范本
2015/04/11 职场文书
红歌会主持词
2015/07/02 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL