回顾
方法重写:是因为对象的访问会先去子类的类空间找,从而形成了对父类的覆盖。
继承链:类只能单继承,但是可以通过继承链来实现多继承
特殊类:final类和抽象类
接口:interface
PHP重载:当访问一个权限不够或者不存在的属性或者方法的时候,会自动触发的魔术方法。
属性重载和方法重载
对象的保存和还原:serialize和unserialize(对应的类已经在内存:如果有资源属性必须进行重新加载资源),魔术方法(__sleep和__wakeup)
对象遍历:默认只能遍历public属性,实现接口Iterator
需求:手里有一个大项目,需要支持多种数据库(Oracle,mysql),采用面向对象的方式去实现。分成两个团队进行不同数据库的支持。
上面的管理方式是直接使用PHP的源代码去管理不同的数据库,PHP后来增加了一个中间层来管理不同的数据库(PDO),php脚本只需要去操作PDO就能够实现对不同数据库的操作。
PDO
介绍PDO
1. 什么是PDO?
PDO:PHP data object,php数据对象,也叫php数据抽象层,是一种能够管理多种不同数据库的数据对象,PHP只需要去调用PDO,而不用去在意PDO底层管理的数据库到底是采用什么样的方式,哪些方法来实现的功能。让PHP操作数据库变得简单。
PDO不止是一个类:而是三个类:PDO类,PDOStatement类,PDOException类
PDO类:主要负责数据库的连接操作以及初始化,能够向服务器发送SQL语句
PDOStatement类:负责处理所有有结果的信息
PDOException类:异常处理类,获取对应可能出错的错误信息,然后采用对象的形式去处理错误
PDO扩展加载
1. 开启扩展:PDO本身的扩展(高版本的PHP默认是开启的),PDO对应数据库的扩展
2. 指定扩展路径
3. 重启Apache生效
PDO操作
1. 连接认证
new PDO():得到一个PDO类的对象,这个对象就可以调用PDO类的所有方法
三个参数
$dsn:数据库类型:host=主机地址;port=端口号;dbname=数据库
$user:用户名
$pass:密码
2. 准备SQL语句,发送给服务器,得到的服务器执行后的结果
必须区分SQL语句到底是什么操作:写操作使用exec,读操作使用query
PDOStatement query:将结果得到之后,返回一个PDOStatement类的对象,因为PDOStatement类是专门用于数据操作的。
3. 解析数据:通过PDOStatement类对象来实现获取对应的数据
在PDOStatement类中,提供了一系列的fetch方法来获取数据
fetch:获取查询结果中的一条记录,同时会将操作指针下移
4. 释放资源:PDO没有提供释放资源的接口(方法)
$pdo = null;//没有明显的意义,因为不会影响PDOStatement类的对象对数据查询的操作。
PDO增删改查
新增操作
修改数据
删除数据与修改数据完全一样,只是SQL语句不一样而已。
查询数据
解析数据方法:PDOStatement类提供的方法
fetch:从结果中获取一行记录,默认返回一个混合数组
fetch_style:
效果
遍历所有结果
fetchAll:取得所有的结果,形成一个二维数组
注意:fetchAll也可以通过指定fetch_style来确定采用什么方式返回数据。
fetchObject:将数据获取到一个对象里面
可以通过指定类,来得到不同类的对象。
fetchColumn:获取指定列的数据
bindColumn:将指定列的数据绑定到一个外部变量,然后在数据fetch操作的时候,会将对应列的数据,直接放到对应的变量当中,然后可以通过直接使用变量相当于操作对应的字段的值。bindColumn必须配合fetch_style的PDO::FETCH_BOUND
先将一个变量绑定到对应的“结果集”;然后再进行获取数据
注意:绑定如果是采用索引进行绑定,索引从1开始表示第一列
可以通过字段名来绑定变量
修改查询模式:setFetchMode,可以一次性修改所有的fetch模式,以后按照指定的模式进行fetch就可以了。
错误处理
任何的SQL语句都有可能执行错误,SQL的错误处理模式都是静默模式,出了错也不会报错,需要对SQL的执行结果进行错误的处理。
PDO::errorCode:获取错误代码
PDO::errorInfo:获取错误信息