PDO类基本应用二

思考:在MySql中,有一种事务功能,能够帮助实现哪些需要多个步骤操作,然后一次性完成的,那么PDO中是如何实现的呢?

引入:其实,事务操作本质上是一种SQL操作,也就是说利用前面所说的写操作(事务都是写操作),就可以实现,而在PDO中,当然也提供

了一定的封装来实现这个功能,从而避免了一些简单的固定SQL执行的操作

PDO事务功能【了解】

定义:PDO事务功能,并非PDO额外多出了一项功能,而是将原来MySql所支持的事务操作进行了一定的封装实现。注意:事务执行是否成功是由MySql对应的存储引擎是否支持决定的

1.事务功能回顾:事务是指改变默认的一次操作一次写入数据表的机制,而是通过事务日志记录操作,在最后通过一次性操作写入到数据表。事务过程如下

  • 开始事务:start transaction,写操作停止直接写入数据表,而是记录事务日志
  • 事务操作:具体的写操作,通常多个步骤多条指令
  • 提交事务:即事务操作结束
  1. 成功提交:commit,所有事务日志内容同步到数据表,并清空当前事务日志
  2. 失败提交 rollback ,直接清空当前事务日志

2.PDO类中提供一套方案来实现事务操作

  • PDO::beginTransction()开启事务
  • PDO::exec()执行事务-----写操作
  • PDO::rollBack()回滚所有事务
  • PDO::commit()成功提交事务
<?php

//实例化PDO函数 封装
function PDO_ini($dsn){

    $obj[email protected]new PDO($dsn,‘root‘,‘root‘);
    if(!$obj){
        exit(‘数据库连接失败‘);
        }else{
            return $obj;
        }
}

$dsn=‘mysql:host=localhost;port=3306;dbname=senven;charset=utf8‘;
$obj=PDO_ini($dsn);

//开启事务
$obj->beginTransction() or die("事务开启失败");

//执行事务
$obj->exec(‘insert into hylist (hyid,hyname,hysex,hyphone) values (‘‘,‘‘,‘‘,‘‘,‘‘)‘);
//省略下面步骤,使用事务必须是多条指令,一条没由意义

//终止事务

$obj->commit();         //成功提交事务
$obj->rollBack();      //失败回滚

?>

3.在事务中,由一种回滚点机制,在PDO中没有实现,如果有必要,可以通过SQL指令设置实现

//我们在MySql中操作事务的时候,可以通过下面代码设置会给你点

start transction;
#回滚点
savepoint sp1;

rollback to sp1;

//那么php中如何回滚点设置呢

$PDO->exec(‘savepoint sp1‘);$PDO->exec(‘rollback to sp1‘);

总结:

  事务的本质是由既定SL指令完成,二事务具体操作内容一定是外部指定的SQL(写操作)来处理

  PDO提供了事务固定内容的封装,包括开启事务(PDO::beginTransction) 执行事务(PDO::exec()) 终止事务(PDO::commit()成功提交事务

    PDO::rollBack()失败回滚事务);

  回滚点可以通过PDO::exec();方法来设定

  如果不采用PDO的事务机制,也可以完全利用PDO::exec()来实现

原文地址:https://www.cnblogs.com/xiaowie/p/12545240.html

时间: 2024-10-10 11:44:09

PDO类基本应用二的相关文章

20150113--PDO增删改查+封装PDO类

回顾 方法重写:是因为对象的访问会先去子类的类空间找,从而形成了对父类的覆盖. 继承链:类只能单继承,但是可以通过继承链来实现多继承 特殊类:final类和抽象类 接口:interface PHP重载:当访问一个权限不够或者不存在的属性或者方法的时候,会自动触发的魔术方法. 属性重载和方法重载 对象的保存和还原:serialize和unserialize(对应的类已经在内存:如果有资源属性必须进行重新加载资源),魔术方法(__sleep和__wakeup) 对象遍历:默认只能遍历public属性

C++ 嵌套类使用(二)

C++嵌套类 1.   嵌套类的名字只在外围类可见. 2.   类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员.嵌套类可以访问外围类的成员(通过对象.指针或者引用). 3.   一个好的嵌套类设计:嵌套类应该设成私有.嵌套类的成员和方法可以设为 public . 4.   嵌套类可以直接访问外围类的静态成员.类型名( typedef ).枚举值. // qiantaolei.cpp : Defines the entry point for the console

封装好的PDO类

封装PDO类,方便使用: <?php header('content-type:text/html;charset=utf-8'); /** * 封装PDODB类 */ // 加载接口 // include './I_DB.interface.php'; class PDODB{ /** * 定义相关属性 */ private $host; //主机地址 private $port; //端口号 private $user; //用户名 private $pass; //密码 private $

类和对象(二)

对象的自身引用是面向对象程序设计语言中特有的.十分重要的一种机制.在C++中,为这种机制设立了专门的表示:this指针变量. 在类的每一个成员函数的形参表中都有一个隐含的指针变量this,该指针变量的类型就是成员函数所属类的类型. 当程序中调用类的成员函数时,this指针变量被自动初始化为发出函数调用的对象的地址. 例如: 123456789101112131415161718 #include <iostream>using namespace std;class Sample{ int x

PDO类PDO、PDOStatement、PDOException

PDO中包含三个预定义的类,它们分别是PDO.PDOStatement.PDOException PDO: PDO->setAttribute(); 全局属性设置,包括:列名格式和错误提示类型 PDO->query($sql); 常用于执行有返回的sql查找语句,但执行之前要手动转义,返回PDOStatement对象 PDO->exec($sql); 执行没有返回的sql语句,同样要手动转义,有插入.修改.删除操作.返回影响的行数 PDO->lastInsertId(); 返回最后

Spring源码分析——BeanFactory体系之抽象类、类分析(二)

上一篇分析了BeanFactory体系的2个类,SimpleAliasRegistry和DefaultSingletonBeanRegistry——Spring源码分析——BeanFactory体系之抽象类.类分析(一),今天继续分析. 一.工厂Bean注册支持——FactoryBeanRegistrySupport 废话不多说,直接看我注释的源码: /* * Copyright 2002-2012 the original author or authors. * * Licensed und

PDO类的封装

<?php class MyPDO{ /** 访问数据库的PDO对象 */ protected $pdo; /** * 当前类的构造函数 * 读取数据库配置信息文件,并初始化PDO对象 */ function __construct() { if (file_exists('db.ini')) { $arr = @parse_ini_file('db.ini'); } else { exit('没有找到对应的数据库配置文件信息 ...'); } $dsn = "{$arr['dbms']}

C++中的类和对象(二)

一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理.所以我们需要动态的去建立该对象,因此我们需要在堆内存中创建对象和释放对象.在C语言中为我们提供了malloc()函数和free()函数来为我们提供在堆内存中分配变量的方式,但是在C++中引入了new和delete关键字来让我们动态的创建和释放变量. 2.new和delete关键字 new关键字是用来在堆内存中创建变量的,格式为:Type * ptr

PHP的PDO类认识

POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题.PDO的目标 提供一种轻型.清晰.方便的 API统一各种不同 RDBMS 库的共有特性,但不排除更高级的特性.通过 PHP 脚本提供可选的较大程度的抽象/兼容性. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训.因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性.能力.PDO 旨在将常见