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代码
Dec 06 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
PHP的password_hash()使用实例
Mar 17 PHP
php实现的漂亮分页方法
Apr 17 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
php获取远程文件的内容和大小
Nov 03 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
PHP预定义超全局数组变量小结
Aug 20 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP 判断变量类型实现代码
2009/10/23 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
关于PHP开发的9条建议
2015/07/27 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
Python常用正则表达式符号浅析
2014/08/13 Python
Ubuntu下安装PyV8
2016/03/13 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python3实现磁盘空间监控
2018/06/21 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
中层干部竞聘演讲稿
2014/05/15 职场文书
文案策划专业自荐信
2014/07/07 职场文书
调研座谈会发言材料
2014/08/23 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
Django基础CBV装饰器和中间件
2022/03/22 Python