zoukankan      html  css  js  c++  java
  • PDO

    需求:手里有一个大项目,需要支持多种数据库(Oracle,mysql),采用面向对象的方式去实现。分成两个团队进行不同数据库的支持。

    上面的管理方式是直接使用PHP的源代码去管理不同的数据库,PHP后来增加了一个中间层来管理不同的数据库(PDO),php脚本只需要去操作PDO就能够实现对不同数据库的操作。

    图片2.png

    PDO

    介绍PDO

    1.什么是PDO?
    PDO:PHP data object,php数据对象,也叫php数据抽象层,是一种能够管理多种不同数据库的数据对象,PHP只需要去调用PDO,而不用去在意PDO底层管理的数据库到底是采用什么样的方式,哪些方法来实现的功能。让PHP操作数据库变得简单。

    PDO不止是一个类:而是三个类:PDO类,PDOStatement类,PDOException类

    图片3.png

    PDO类:主要负责数据库的连接操作以及初始化,能够向服务器发送SQL语句!

    图片4.png

    PDOStatement类:负责处理所有有结果的信息

    图片5.png

    PDOException类:异常处理类,获取对应可能出错的错误信息,然后采用对象的形式去处理错误

    图片6.png

    PDO扩展加载

    1.开启扩展:PDO本身的扩展(高版本的PHP默认是开启的),PDO对应数据库的扩展

    图片7.png

    2.指定扩展路径

    图片8.png

    3.重启Apache生效

    PDO操作

    1.连接认证
    new PDO():得到一个PDO类的对象,这个对象就可以调用PDO类的所有方法
    三个参数

    $dsn:数据库类型:host=主机地址;

    port=端口号;dbname=数据库

    $user:用户名 $pass:密码

    2.准备SQL语句,发送给服务器,得到的服务器执行后的结果
    必须区分SQL语句到底是什么操作:写操作使用exec,读操作使用query
    PDOStatement query:将结果得到之后,返回一个PDOStatement类的对象,因为PDOStatement类是专门用于数据操作的。

    3.解析数据:通过PDOStatement类对象来实现获取对应的数据
    在PDOStatement类中,提供了一系列的fetch方法来获取数据
    fetch:获取查询结果中的一条记录,同时会将操作指针下移

    PDO增删改查

    新增操作 修改数据 查询数据

    解析数据方法:PDOStatement类提供的方法
    fetch:从结果中获取一行记录,默认返回一个混合数组

    图片9.png

    fetchAll:取得所有的结果,形成一个二维数组

    fetchObject:将数据获取到一个对象里面

    bindColumn:将指定列的数据绑定到一个外部变量,然后在数据fetch操作的时候,会将对应列的数据,直接放到对应的变量当中,然后可以通过直接使用变量相当于操作对应的字段的值。bindColumn必须配合fetch_style的PDO::FETCH_BOUND
    先将一个变量绑定到对应的“结果集”;然后再进行获取数据

    注意:绑定如果是采用索引进行绑定,索引从1开始表示第一列

    修改查询模式:setFetchMode,可以一次性修改所有的fetch模式,以后都可以按照指定的模式进行fetch就可以了。

    错误处理

    任何的SQL语句都有可能执行错误,SQL的错误处理模式都是静默模式,出了错也不会报错,需要对SQL的执行结果进行错误的处理。
    PDO::errorCode:获取错误代码
    PDO::errorInfo:获取错误信息

    预处理

    预处理:提前处理,在一次数据库连接过程中,可以提前将要执行的SQL语句发送给服务器,但是暂时不执行,等到需要执行的时候再去执行。
    1、sql语句在执行之前事先编辑好,在需要多次调用的地方直接使用,可以避免重复性,节省带宽
    2、由于sql语句事先编辑好了,可以防止sql注入
    真 And (select cout(*) from 表名)<>0
    Select * from user where username=’’ or ‘1’=’1’ and password=’’ or ‘1’=’1’ ;

    预处理语法

    1.准备预处理:将要执行的SQL语句起个别名然后发送给服务器。
    prepare 预处理名字 from ‘要执行的SQL语句’;

    2.执行预处理。
    execute 预处理名字;

    预处理使用参数
    1.准备预处理:有些地方可以事先使用占位符“?”来代替真实数据。

    2.如果预处理有参数的话,那么必须携带参数。参数必须是通过变量传入。
    execute 预处理名字 using 变量;

    预处理意义

    节省带宽(执行一次较长的SQL语句,每次使用的时候都只需要提供变量)

    PDO预处理

    预处理执行流程

    1.发送预处理语句
    $stmt=$pdo->prepare($sql) //获取PDOStatement对象
    2.执行预处理(如果要传参数时传递数组) 参数分为索引数组(?)和关联数组(:name)
    $stmt->excute(); //PDOStatement对象的方法

    注意:在使用PDO进行预处理的时候,尽量不要使用问号占位符,使用变量(:名字)

    PDO事务处理

    参考网址:http://rmingwang.com/php-mysql-pdo.html http://rtxbc.iteye.com/blog/1343173

    数据库的存储引擎必须是innerDB
    Myisam : 在读方面速度快,适合高并发,但不支持事务
    innerDB: 在写方面占优,支持事务
    MySQL的事务处理:
    1】开启事务
    Mysql_query(‘begin’)
    2、事务提交
    Mysql_query(‘commit’)
    3、事务回滚
    Mysql_query(‘rollback’)

    PDO的事务处理完全遵照mysql下面的事务处理来实现,只是将不同的动作封装到不同的方法中。

    事务流程
    1.开启事务

    2.事务处理:进行多次有关联的写操作

    3.结束事务
    a)成功:commit方法

    b)失败:rollback方法

    注意:要支持事务,必须要争数据库的存储引擎是InnoDB(才支持事务)。

    PDO属性

    PDO属性不是指的PDO类的对象里面所保存的属性,而是指的PDO对象在操作数据的过程中应该按照某些指定的情况去处理数据。
    PDO属性不是真正的PDO类对象的属性,是数据库的属性

    对于属性操作:PDO提供两个方法,getAttribute获取属性的值,和setAttribute设置属性的值。

    这些属性都是以属性名和属性值的键值对的形式存在
    PDO::ATTR_AUTOCOMMIT:是否自动提交,默认都是自动提交,值是1

    PDO::ATTR_CASE,代表数据库返回数据的时候,字段的大小写,默认是与数据库字段设计的大小写一致PDO::CASE_NATURAL

    PDO::CASE_LOWER:全部字段小写(字段名)
    PDO::CASE_UPPER:全部大写
    PDO::CASE_NATURAL,默认自然的,不改变
    修改属性

    PDO::ATTR_ERRMODE,mysql对出错的处理模式
    PDO::ERRMODE_SILENT:默认的,静默模式,出错不会报错
    PDO::ERRMODE_WARNING:警告模式,出错会给出一个警告
    PDO::ERRMODE_EXCEPTION:异常模式,出错会抛出一个异常

    PDO::ATTR_PERSISTENT,连接的持久性,默认的是false,短连接
    TRUE:长连接,脚本执行结束,如果换一个脚本依然需要操作数据库,连接不会中断

    条件:mysql服务器开启长连接(默认不允许),Apache支持长连接(需要配置)

    FALSE:短连接,脚本执行结束一定会释放(断开)连接资源

    PDO::MYSQL_ATTR_INIT_COMMAND 设置字符集(解决中文乱码)

    PDO异常

    异常其实错误,异常处理是一种将错误放到一个对应的对象里面,然后通过对象去对错误进行操作一种模式。

    异常处理的实现语法
    将所有有可能出现错误的语句,都放到一个可以抓取异常的上下文:try;其次需要一个指定类型的数据类的对象来捕获异常,并进行异常处理:catch

    1 try{
    2 
    3 //所有有可能出错的语句,一旦出粗就会立马进入到catch里面,而且讲所有的错误信息放到异常处理类对应的对象里面
    4 }catch(异常处理类 对象名字){
    5 
    6 //错误处理的方式
    7 }

    要使用异常模式来抓取PDO可能出现的错误,那么必须将错误处理模式设置成异常模式

  • 相关阅读:
    POJ 3187 Backward Digit Sums
    POJ 3669 Meteor Shower BFS
    POJ 1979 Red and Black DFS
    不想切题、
    企业管理信息系统成功实施的四个阶段
    linux下memcached的安装
    Apache开启伪静态示例
    网页设计基础知识
    memcached安装说明
    伪静态.htaccess的练习
  • 原文地址:https://www.cnblogs.com/BrokenHeart/p/10615990.html
Copyright © 2011-2022 走看看