首页 > 代码库 > pdo

pdo

PDO

什么是pdopdo其实是因为每个数据库都有自己的语法规则,语法不同,如果项目在后期需要转换数据库,很多代码需要重新敲打,这样工作效率就大大降低了,所以通过封装一个类,通过一种方法操作各种数据库就是PDO所做的事!

PDO的开启

PDO的使用是需要事先开启扩展,开启扩展的方法:

php.ini配置文件中找到extension=php_pdo_mysql.dll,将左侧的注释符去掉即开启

然后将Apache重启!

PDO的实例化

PDO的实例化只需要new PDO即可,

PDO的构造方法

PDO的构造方法是用来连接数据库

语法如下:

PDO::__construct()

需要四个参数:

$dsn:数据源名称,其实就是告诉PDO需要选择哪种类型的数据库,主机号和端口号是什么,选择哪个数据库以及采用什么字符编码等!

$username数据库的用户名

 

$password用户的密码

 

$driver_options附加驱动选项,暂时用默认

注意,给$dsn赋值有固定的语法,语法如下:

$dsn=”数据库类型:host=主机地址;post=端口号;dbname=所选数据库名;charset=字符编码”;

PDO的增删改操作

PDO的增删改操作主要是调用pdo对象的exec方法

 exec(执行语句)

返回的数据是整型,指被更改的行数

通过if语句能够判断到是否更改成功,pdo大部分内容是私有的,只有通过特定的方法才能获取到它里面的东西;

PDO实现查询功能

query 方法

MySQL中的mysql_query()方法一样,返回的是一个PDOStatement类的对象,但是不能直接打印出对象内的属性

PDOStatement对象

rowCount

作用:获取查询结果中的总行数(总记录数)

columnCount

作用:获取查询结果中的总列数(总字段数)

fetch

作用:

每次都从PDOStatement结果集中获取一条记录,同时把指针下移!其中该方法可以有一个参数,该参数的作用就是控制返回值的类型!

对象名->fetch(参数)

 

最常用的参数有:

PDO::FETCH_ASSOC返回一个关联型的数组(数组的下标就是原记录中字段的名称),效果类似于以前的mysql_fetch_assoc

PDO::FETCH_NUM返回一个索引数组,效果类似于以前的mysql_fetch_row

PDO::FETCH_BOTH返回一个索引和关联并存的混合数组,效果类似于mysql_fetch_array,也是默认值!

PDO::FETCH_OBJ返回一个对象,其中对象的属性名就是字段名!

语法:

fetchAll

作用:

返回一个结果集中的所有的记录,形成一个二维数组!

fetchColumn

作用:

每次获取一列信息中的一条记录,并将指针下移!

该方法需要一个参数,用来代表需要获取哪一列的信息,第一列为0,第二列为1,依次类推!

fetchObject

效果等于fetch(PDO::FETCH_OBJ);

PDO的预处理技术

含义:每次通过PHP操作MySQL等数据库,没发送一条执行语句数据库就得操作一次,然后结束操作,这样工作效率会大大降低

预处理的基本策略:

 

sql语句一分为二:

第一部分为前面命令和结构都相同的部分

第二部分为后面可变的数据部分

 

然后在执行sql语句的时候,先将前面相同的命令和结构部分发送给mysql服务器进行一次预处理操作,但是此时并没有真正的执行语句!

而为了保证sql语句的结构完整性,在第一次发送sql语句的时候可以将其中可变的数据部分用一个数据占位符来表示!(比如常见的占位符是一个问号?)

 

此时,系统会把该预处理后的结果暂时放到内存中,这样再次执行后续操作的时候,只需要传递相关的参数(也就是与数据占位符相对应的数据)就行了!

第一步 发送预处理语句

需要调用prepare方法

第二步:绑定参数

此时,我们需要调用PDOStatement对象的bindParam方法:

bingdParam 方法有两个参数

参数一,占位符的位置,从1开始

参数二:数值(变量)

第三步:执行预处理语句

这个时候,又需要调用结果对象PDOStatement中的execute方法,如果执行成功,就返回true,否则就返回false

PDO事务处理

事务处理的概念:

举个列子,你在使用支付宝给好友转账的时候,如果刚好数据库出现问题,你这边用户余额扣除成功了,对方增加余额没成功,那么这次操作是不是你就血亏啦,所以,就诞生了事务处理这么一个概念,当双方都操作成功的时候,执行才算成功,不然一切都是无效的

开启事务:beginTransaction()

回滚操作:rollback()

执行提交:commit()

我们可以通过判断执行提交结果是否成功,如果两个有一个不成功的话,就回滚操作,回到开启事务之前!

PDO的相关属性(参数)

PDO的参数有很多,我们主要学习以下的几个:

PDO::ATTR_AUTOCOMMIT自动提交    (属性名)

只有两个值:01   ps:属性值)

0代表不开启自动提交,手动提交(处理事务就是非自动提交)

1代表开启自动提交,也是默认值

 

PDO::ATTR_CASE返回结果集的大小写(重要)  ps:属性名

属性值:

PDO::CASE_LOWER:返回的结果集全部小写

PDO::CASE_UPPER:返回的结果集全部大写

PDO::CASE_NATURAL:返回的结果集全部大写(跟表中大小写保持一致)

 

PDO::ATTR_ERRMODE返回的错误模式(重要) ps;属性名

属性值:

PDO::ERRMODE_SILENT :静默模式,也是系统默认的模式

PDO::ERRMODE_WARNING :警告模式

PDO::ERRMODE_EXCEPTION :异常模式

 

要用到的两个方法:

 

设置PDO属性:setAttribute(属性名,属性值);  

获取PDO属性:getAttribute(int)

PDO异常处理

异常的概念

异常,其实就是错误,不过是在面向对象编程语言中一种典型的错误处理方式!就是将错误信息,放到一个对象里面!

 

异常的发生有一个前提,就是必须保证语法是正确的!

Pdo默认的异常处理模式是静默模式,也就是即使出错,它也不会报错,就是这么的狗屎!

异常的处理

首先要发生异常!

所谓发生,就是指抛出一个异常!

 

然后是处理异常!

所谓处理,就是一旦异常出现,要得到并处理这个异常!

通常是由两个阶段组成:监听和捕获!

抛出异常

关键字:throw

语法形式:

throw 异常对象

 

这里的异常对象,需要实例化系统预定义的异常类(类名叫Exception或者是其扩展类才可以!

监听

关键字try

利用关键字try可以监视一段代码内,是否发生了异常!

语法为:

 

try{

被监视的代码段

}

捕获

关键字:catch

一旦监听的代码出现了异常(有异常抛出),则可以利用catch关键字进行异常的捕获!

PDO中错误处理方式

所谓的错误处理的方式,就是指一旦出现了错误,系统应该如何对待!

 

PDO一共提供了三种错误处理的方式:

 

PDO::ATTR_ERRMODE返回的错误模式(重要)

PDO::ERRMODE_SILENT 静默模式,也是系统默认的模式

PDO::ERRMODE_WARNING :警告模式

PDO::ERRMODE_EXCEPTION :异常模式

pdo