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之第四天
Oct 09 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
header跳转和include包含问题详解
Sep 08 PHP
PHP 解决session死锁的方法
Jun 20 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
PHP实现微信退款的方法示例
Mar 26 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 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
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
浅析PHP开发规范
2018/02/05 PHP
PDO::quote讲解
2019/01/29 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
校园安全演讲稿
2014/05/09 职场文书
新闻编辑求职信
2014/07/13 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
士兵突击观后感
2015/06/16 职场文书
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技