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 excel类 phpExcel使用方法介绍
Aug 21 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
php常见的魔术方法详解
Dec 25 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
PHP rmdir()函数的用法总结
Jul 02 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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 VS ASP
2006/10/09 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
js异或加解密效果代码
2008/06/25 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
python创建关联数组(字典)的方法
2015/05/04 Python
python快排算法详解
2019/03/04 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
材料化学应届生求职信
2013/10/09 职场文书
应届生骨科医生求职信
2013/10/31 职场文书
大学生求职信范文应怎么写
2014/01/01 职场文书
消防安全管理制度
2014/02/01 职场文书
公司节能减排倡议书
2014/05/14 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
大雁塔导游词
2015/02/04 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js