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 相关文章推荐
1.PHP简介
Oct 09 PHP
自定义PHP分页函数
Oct 09 PHP
用PHP和ACCESS写聊天室(十)
Oct 09 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
php两种无限分类方法实例
Apr 21 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP单链表的实现代码
Jul 05 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
PHP的Trait机制原理与用法分析
Oct 18 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与mysqli事务使用说明 分享
2013/08/17 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
Node.js readline模块与util模块的使用
2018/03/01 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
信用社员工先进事迹材料
2014/02/04 职场文书
会计核算科岗位职责
2014/03/19 职场文书
节约能源标语
2014/06/17 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
JVM之方法返回地址详解
2022/02/28 Java/Android
Python读写yaml文件
2022/03/20 Python