预处理
预处理:提前处理,在一次数据库连接过程中,可以提前将要执行的SQL语句发送给服务器,
预处理语法
1. 准备预处理:将要执行的SQL语句起个别名然后发送给服务器。
prepare 预处理名字 from ‘要执行的SQL语句’;
2. 执行预处理。
execute 预处理名字;
预处理使用参数
1. 准备预处理:有些地方可以事先使用占位符“?”来代替真实数据。
2. 如果预处理有参数的话,那么必须携带参数。参数必须是通过变量传入。
execute 预处理名字 using 变量;
预处理意义
1. 节省带宽(执行一次较长的SQL语句,每次使用的时候都只需要提供变量)
PDO预处理
预处理执行流程
1. 发送预处理语句
2. 执行预处理
在PDO使用预处理的过程中,一个PDOStatement类的对象只能同时操作一个预处理,所以要使用多个预处理,必须在PDO::prepare()方法的返回值的,使用不同的变量来保存对象。
PDOStatement::execute():执行预处理
2.1 预处理绑定参数1:使用参数数组
采用数组的形式来给预处理赋值
2.2 使用bindParam来绑定参数
bindParam():就是给一个变量绑定一个值
2.3 使用bindValue来绑定参数
bindValue():与bindParam基本一样
bindParam&bindValue
bindParam胜了bindValue:使用的引用传值方式进行传参,参数可以循环利用。
利用参数的修改可以直接修改execute所执行的结果。
问号占位符
绑定参数
数组绑定参数
注意:在使用PDO进行预处理的时候,尽量不要使用问号占位符,使用变量(:名字)
PDO事务处理
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异常
异常其实错误,异常处理是一种将错误放到一个对应的对象里面,然后通过对象去对错误进行操作一种模式。
异常处理的实现语法
将所有有可能出现错误的语句,9都放到一个可以抓取异常的上下文:try;其次需要一个指定类型的数据类的对象来捕获异常,并进行异常处理:catch
try{
//所有有可能出错的语句,一旦出现就会立马进入到catch里面,而且将所有的错误信息放到异常处理类对应的对象里面
}catch(异常处理类 对象名字){
//错误处理的方式
}
要使用异常模式来抓取PDO可能出现的错误,那么必须将错误处理模式设置成异常模式
通常的处理方式
主动抛出异常:throw new PDOException
反射(不是今天的重点)
在程序中,反射是在通过获得一个类,让类内部的结构给反射出来,能将类内部的属性,方法,常量给全部显示处理。(不会包含方法体)。
反射意义:将类内部结构展示给程序员看,程序员看了结构之后能够更好的去操作类。
在php中有一个类:ReflectionClass,用于反射的操作类
该类中有一个静态方法:export()能够将一个对应的类的结构给反射出来(打印)
不单只可以通过反射类ReflectionClass来查看类的内部结构,还可以通过对象的形式去获取获取对应的数据信息。里面有三个方法,能够帮助我们去更好的了解一个类的使用。
getProperties:获取所有的属性
getMethods:获取所有的方法
getConstants:获取所有的常量
new ReflectionClass(‘类名’);
获取所有的方法:getMethods
获取所有属性:getProperties
获取常量:getConstants
封装PDO
把PDO一些不方便的地方,进行再次封装,变的方便
见代码:MyPDO.class.php
作业:完善MyPDO类:增删改查都有(建议:对外接口做成protected)