1.为什么要使用PDO?

mysql_*函数已经过时,相当一段时间以来,mysql_*函数在其他SQL数据库编程接口方面已经有所差别;它不支持预处理,存储过程,事务等一些现代数据库设计思想,SQL语句字符转义函数  mysql_real_escape_string()  和拼接SQL语句的编程方法已经过时并且很容易出错.最近一段时间里,它缺乏开发者关注,缺少维护将可能导致一些安全问题不能及时修复,或者在适配新版本的MySQL的时候不能正常工作,这成为mysql_*函数面临的另一个问题.PHP社区最近也对mysql_*函数给出不建义使用的建义,也有可能在未来的版本中最终被弃用.

PDO拥有更好的编程接口,你可以使用它写出更加简洁,高效,安全的代码.PDO还为不同的SQL数据库提供了不同的驱动,方便你使用新的数据库而不用再学不同的编程接口.与拼接SQL语句构造查询语句不同,绑定参数可以简洁方便地构造出更加安全的查询 语句,使用绑定参数 的方法在多次相似语句查询 (仅仅某个参数不同)中也可以提高不少性能。PDO在错误处理方面也提供了多种方法。mysql_*函数缺乏一致的处理,与PDO的异常模式相比,或者说没有处理异常,使用PDO,你可以得到一致的错误处理,这将节省您大师的时间来跟踪问题。

在当前的PHP版本中,PDO模块是默认安装启用的,但是在使用PDO前你还需要安装另外两个软件包,一个是pdo_mysql数据库驱动程序 ,别外一个是类似php-mysql的mysql驱动程序 。

2.连接MySQL

2.1. 以前的连接方式

2.2.新的连接方式

*创建一个PDO对象,参数包括DSN,username,password和一个驱动选项数组(可忽略)。

*DSN其实就是一个告诉PDO该使用哪一种数据库驱动和一些连接信息的字符串,了解更多PDO MYSQL DSN .

你也可以在创建PDO对象后再通过setAttribute方法设置相应选项。

3.错误处理

3.1. mysql_*函数的错误处理

OR die() 是个不错的处理方法,但是会因此结束页面,将错误信息呈现到用户面前,这可能是我们不想看到的结果 。

PDO有三种错误处理模式:

1.PDO::ERRMODE_SILENT #和mysql_*函数类似,检查代码并查看$db->errorInfo();获取详细信息。

2.PDO::ERRMODE_WARNING #抛出PHP警告。

3.PDO::ERRMOD_EXCEPTION #抛出PDOException异常,在我认为,这是我们应该使用的模式,这和die(mysql_error());类似,但是它可以捕获并抛出具体异常信息。

3.2. code:

注意: 你可以不用立即执行并捕获异常,你可以在任何合适的时候随时捕获。

如果 你不想使用try/catch来处理异常,就像使用 OR die()那样处理,在production模式下关闭display_error选项即可。

4.简单查询语句(SELECT)

4.1. MYSQL_* 代码

4.2 PDO代码

query() 方法返回一个PDOStatement 对象,你可以通过如下方法获取结果:

或者

4.3#Fetch Modes

注意 fetch() 和  fetchAll() 代码中的 PDO::FETCH_ASSOC ,它告诉PDO以关联数组的形式返回 键、值;其它比如PDO::FETCH_NUM模式,则以索引数组返回,默认模式是 PDO::FETCH_BOTH 则返回前面两者的集合,既有索引数组,又有关联数组。PDO也可以获取数据返回对象 PDO::FETCH_OBJ , PDO::FETCH_CLASS , PDO::FETCH_BOUND,BINDCOLUMN 方法等更多内容,请阅读PDOStatement Fetch documentation

4.4. #获取数据行数(Getting Row Count)

代替 mysql_num_rows,你可以使用 PDOStatement 对你的 rowCount() 方法。

注意:官方文档称些函数仅适用于返回 UPDATE , INSERT , DELETE 操作的 affected rows , 而 SELECT 操作,仅对于 PDO_MYSQL驱动,此函数同样适用(谨记),在操作其它数据库的时候尤其注意。

4.5. #获取最后操作ID(Getting Last Insert Id)

mysql_*代码:

PDO代码:

5.执行INSERT , UPDATE , DELETE操作

5.1. mysql_*代码:

5.2. PDO代码:

DELETE , INSERT 操作同样适用。

6.运行带有查询参数的语句(Running Statements With Parameters)

对于不携带任何参数的查询语句,我们可以使用query方法处理SELECT操作,使用exec方法处理INSERT, UPDATE, DELETE操作,而对于携带查询参数的语句,你应该使用绑定参数的方法来安全的处理这些操作。

6.1.mysql_*代码:

6.2.PDO代码:

 

发表回复

您的电子邮箱地址不会被公开。