pdo
PDO
什么是pdo,pdo其实是因为每个数据库都有自己的语法规则,语法不同,如果项目在后期需要转换数据库,很多代码需要重新敲打,这样工作效率就大大降低了,所以通过封装一个类,通过一种方法操作各种数据库就是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:自动提交 (属性名)
只有两个值:0或1 (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 :异常模式