PDO与异常

一. 为什么使用PDO

WEB开发中,能够使用的数据库不仅仅只有MYSQL,还可能使用其他的数据库,比如:ORACLEFIREBIRDMSSQL等。

 

PHP程序中,我们执行的是相同的操作,但是所写的操作函数就不一样,以连接数据库操作为例:

MySQLmysql_connect

MSSQLmssql_connect

ORACLEoci_connect

 

所以,当我们要切换数据库时,就必须更换为相应扩展的操作函数

 

 

 

这无疑将提高程序人员操作的门槛,一方面我们需要学习不同的数据库操作函数,非常麻烦;另一方面维护起来也会增加负担

 

所以,我们可以使用PDO,来达到使用相同的操作函数就能操作不同类型数据库的目的。

 

二. 什么是PDO

PDO即:PHP DATA OBJECT    PHP数据对象。

在新版本的PHP中,PHP封装了一套PDO扩展库,专门用来操作不同类型的数据库

 

 

 

 

 

 

PDO扩展是以面向对象的方式来进行封装,也就是说,我们的PDO扩展实际上就是指封装好的PDO类。

 

三. 配置和开启PDO

既然我们的PDO是一个扩展,那么在使用时就必须先配置和开启这个扩展。

 

第一步,在php.ini文件中配置extension_dir配置项

 

 

第二步,在extension_dir指定的目录下查看php_pdo_mysql.dll文件是否存在并且在php.ini中开启相应的extension配置

 

 

 

 

第三步,重启apache并且检查PDO扩展是否开启成功

 

 

 

注意:php5以下的版本中,在第二步除了要开启php_pdo_mysql.dll扩展配置项外还需开启php_pdo.dll配置项。

 

四. PDO的基本操作

PDO类的构造方法

我们首先来看一下PDO类的构造方法。

 

参数说明:

$dsn: 表示数据源名称,一般包括数据库地址,端口号,字符集,默认选择的数据库名。

$username表示数据库的帐号

$password表示数据库的密码

$driver_options:表示附加选项,用默认值即可。

 

 

 

 

我们来实例化一个PDO类的对象:

Code2.php

 

 

 

注意:以上hostportcharsetdbname的值不能用引号包裹,否则报错。

 

增删改操作

 

 

我们需要通过PDO对象调用exec方法来实现增删改操作。

 

新增操作:

 

 

修改操作和删除操作都与新增操作一样,都是通过exec方法执行相应的SQL语句来完成。

 

 

查询操作

PDO::query方法

 

 

我们需要通过PDO类下的query方法来执行查询SQL语句。

 

 

 

通过query方法执行SQL语句之后,如果执行成功则返回PDOStatement类的对象,如果失败返回false

 

 

 

PDOStatement::fetch方法

指定PDO::FETCH_ASSOC参数,相当于mysql扩展中的mysql_fetch_assoc函数的功能,都是返回一条记录,并且是关联数组。Code5.php

 

 

 

指定PDO::FETCH_NUM参数,相当于mysql扩展中的mysql_fetch_row函数的功能,都是返回一条记录,并且是索引数组。Code6.php

 

 

 

指定PDO::FETCH_BOTH参数,相当于mysql扩展中的mysql_fetch_array函数的功能,都是返回一条记录,并且是同时包含索引和关联元素的数组。Code7.php

 

 

指定PDO::FETCH_OBJ参数,返回一条记录,这条记录是将数据保存到一个对象中的。Code13.php

 

 

PDOStatement::fetchAll方法

Code8.php

 

 

PDOStatement::rowCount方法

 

 

获得查询出的结果一共有多少行。

 

 

 

PDOStatement::columnCount方法

返回查询结果一共有多少列(个字段)。

 

 

 

 

PDOStatement::fetchColumn方法

获得当前行的某个字段索引位置的数据的值。

 

 

 

 

PDOStatement::fetchObject方法

就相当于PDOStatement::fetch方法指定了PDO::FETCH_OBJ参数,效果一样。

每次执行,都将查询得到的返回一条记录,这条记录保存到了一个对象当中,其中对象的属性名就是这条记录的字段名,对象的属性值就是这条记录对应字段的数据值。

 

 

 

五. 预处理技术

为什么使用预处理技术

我们知道,数据库都是通过SQL语句来进行操作的,通常,执行SQL语句的机制是:

1, 准备sql语句

2, 发送sql语句到Mysql服务器执行

3, Mysql服务器端完整解析并执行sql命令并返回处理结果

 

以向news表新增一条数据为例:

1,构建SQL语句

$sql= “insert into news values(null,'title1','intro1','content1');

2,执行SQL语句

mysql_query($sql);

 

但是,如果一个脚本中需要向news表插入多条记录的时候,可能会连续执行如下的数据库操作:

 

 

当然,上面的sql语句都可以执行,但是采用这种执行的方式效率并不高,因为每次执行的sql语句的命令和结构都是一样的!只是其中的数据不一样而已!

 

但是由于采用传统的执行方式,每次都必须传输整条语句,而且对MySQL服务器而言,每次也都是重新解析并执行一条新的sql语句!

那么,有什么方式可以对此进行优化呢?

MYSQL中,我们可以通过预处理技术来优化解决此类问题!

什么是预处理技术

概念:预处理技术,是最初由Mysql提出的一种为了减轻服务器负担的一种机制!

预处理技术的基本思路

基本思路:

SQL语句一分为2

第一部分是公共的操作部分;

第二部分是可变的数据部分;

 

每次执行该操作的时候,只需要传递可变的数据部分。

MYSQL客户端中的预处理技术

不带参数的预处理技术

第一步,准备预处理语句

语法:prepare 自定义的预处理语句名 from SQL语句;

 

 

第二步,执行预处理语句

语法:execute 预处理语句名;

 

 

第三步,删除预处理语句

语法:drop prepare 预处理语句名;

 

 

带参数的预处理技术

第一步,准备预处理语句

注意:可变数据的部分需要用占位符”?”来占位。

 

 

第二步,设置参数

语法:set @参数名=字段值;

 

 

注意:这里的参数名是自定义的,也就是说可以任意定义名字;这个名字与字段名无关。

 

第三步,执行预处理语句

注意:在执行的时候,需要指定使用的参数。

 

 

 

注意:在上图中执行预处理语句使用的参数,至于下图中占位符的位置有关,与字段名无关。

 

 

第四部,删除预处理语句

 

PDO中的预处理

第一步,准备预处理语句

我们需要通过PDO类中的prepare方法来实现。

 

 

Code14.php

 

 

 

第二步,绑定参数

我们需要通过PDOStatement类中的bindParam方法来实现。

 

 

 

通过bindParam方法可以通过绑定占位符的位置来绑定相应的参数。如下图中,从14号位置都绑定参数。

Code14.php

 

 

 

第三步,执行预处理语句

我们需要通过PDOStatement类中的execute方法来实现。

 

 

Code14.php

 

 

 

PDO中绑定参数的其他方法

第一种方式,绑定:变量名的形式绑定参数

 

 

第二种方式,绑定数组的方式绑定参数

 

 

 

六.PDO中的事务处理

回顾MYSQL客户端中的事务的处理

注意:如果要使用事务,则这个表必须是Innodb引擎。

第一步,开启事务

 

 

 

第二步,执行SQL语句操作

 

 

第三步,如果返回(执行失败)则回滚,如果成功则提交

回滚

 

 

 

 

提交

 

 

 

提交后最终的效果

 

 

PDO中的事务处理

第一步,开启事务

我们需要通过PDO类中beginTransaction来开启事务。

 

 

 

 

第二步,执行SQL语句

Code17.php

 

 

第三步,如果都执行成功则提交,如果有一个失败则回滚

Code17.php

 

 

七.PDO异常处理

PHP中的异常处理

我们通俗的理解为:欲加之罪。

 

我们PHP中存在一个预定义的异常类。

 

 

 

 

 

在程序中的实现

Code18.php

 

 

 

PDO中的异常

属性的设置

我们会通过PDO类中的setAttribute方法来设置属性。

 

 

 

PDO::ATTR_ERRMODE    属性名,表示设置错误信息报告方式

值:

PDO::ERRMODE_SILENT    表示设置为静默模式(默认的模式)

PDO::ERRMODE_WARNING    表示设置为警告模式

PDO::ERRMODE_EXCEPTION    表示设置为异常模式

 

实现PDO中的异常处理

第一步,设置错误处理模式为异常模式

 

 

第二步,监听代码

 

 

第三步,捕获异常处理

 

 

 

最终效果:

Code20.php

 

 

 

八.案例:封装PDO操作类

分析

1.连库相关操作

2.获得一条记录

3.获得多条记录

4.增删改操作

代码实现

Code21.php

 

 

posted @ 2017-08-29 14:16  奋斗的黑蜗牛1号  阅读(411)  评论(0编辑  收藏  举报