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 相关文章推荐
通过ICQ网关发送手机短信的PHP源程序
Oct 09 PHP
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
php 8小时时间差的解决方法小结
Dec 22 PHP
php读取xml实例代码
Jan 28 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
php学习之简单计算器实现代码
Jun 09 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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抓即时股票信息
2006/10/09 PHP
yii操作cookie实例简介
2014/07/09 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
vue模式history下在iis中配置流程
2019/04/17 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
应届生财务管理求职信
2013/11/06 职场文书
岗位职责风险防控
2014/02/18 职场文书
文明寝室申报材料
2014/05/12 职场文书
新文化运动的基本口号
2014/06/21 职场文书
小学运动会开幕词
2015/01/28 职场文书
金榜题名主持词
2015/07/02 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
Python基础之pandas数据合并
2021/04/27 Python
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
JS封装cavans多种滤镜组件
2022/02/15 Javascript
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技