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的curl实现get和post的代码
Aug 23 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
Mar 05 PHP
关于crontab的使用详解
Jun 24 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
PHP中替换键名的简易方法示例详解
Jan 07 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
CI框架集成Smarty的方法分析
May 17 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP程序员必须知道的两种日志实例分析
May 14 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 日志缩略名的创建函数代码
2010/05/26 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
基于jquery的超简单上下翻
2010/04/20 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
Python中的ceil()方法使用教程
2015/05/14 Python
python删除服务器文件代码示例
2018/02/09 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
《卖木雕的少年》教学反思
2014/04/11 职场文书
城管大队整治方案
2014/05/06 职场文书
2014年采购员工作总结
2014/11/18 职场文书
办公经费申请报告
2015/05/15 职场文书
门面租赁合同范文
2019/08/06 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers