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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
PHP的开发框架的现状和展望
Mar 16 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
php下把数组保存为文件格式的实例应用
Feb 08 PHP
PHP Stream_*系列函数
Aug 01 PHP
PHP运行模式的深入理解
Jun 03 PHP
php计算title标题相似比的方法
Jul 29 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
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
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
php join函数应用
2011/05/04 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
ExpressJS入门实例
2015/01/14 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
python操作redis方法总结
2018/06/06 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python3获取当前目录的实现方法
2019/07/29 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
高三政治教学反思
2014/02/06 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python