PDO 简介
一个用于访问数据库的轻量级接口,它提供了数据库抽象层,让我们的程序可以同时支持多种数据库,但是它本身并不提供任何数据库的功能,需要搭配对应的数据库驱动来使用。
有点绕,下面给大家拆解一下这段话。
干嘛的?
用来读写数据库的。
和mysqli 有什么区别?
mysqli 只能用于MYSQL数据库,而PDO 可以支持很多类型的数据库,比如 sql server、oracle等。
支持哪些数据库?
无限多,只要你有对应的“数据库驱动”。换句话说,至少你得有一个“数据库驱动”,当然,PHP自带就好几种了。
什么是数据库驱动?
与PDO 一样,都是PHP扩展。
在WINDOWS的系统中,你可以在这个目录下找到他们 (),如果是 Linux 的操作系统,在编译安装PHP的时候,通过可选参数来支持各种数据库。
何谓数据库抽象层?
简单来说就是“中介”,想象买房卖房的中介吧。
如果你用 MySQLi 扩展,是这样的:PHP -> MySQLi
而PDO 是这样的:PHP -> PDO -> 数据库驱动(MySQLi)
即使你更换了数据库驱动,也只影响PDO,PHP的代码则毫无影响。
真的可以无缝切换数据库?
实际上并不能,每个数据库的SQL语法稍有差别,如果你想无缝切换,大概还需要这样:
避免使用非标准SQL
为每个数据库驱动再封装一个抽象层
其实,绝大多数情况下我们都不需要同时支持多个数据库,对吗?
获得 PDO
从 PHP 5.1 版本开始,默认就附带了PDO,所以多数情况下,你安装了PHP,就自然有了PDO。
常见的数据库驱动,也都随之附带了。
支持哪些数据库?
至少已经有了这些驱动,常见的数据库基本都OK吧。
PDO_CUBRID Cubrid
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_IBM IBM DB2
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x/5.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 及 SQLite 2
PDO_SQLSRV Microsoft SQL Server / SQL Azure
PDO_4D 4D
为什么我的课程中使用 MySQli
考虑同学的学习成本
虽然在某些入门后的同学看来,PDO很简单啊,这有什么难的?但,其实这是会者不难的问题。
对于初学者而言,PDO 的某些概念,还是不如 Mysqli 来的容易。
PS: 即便是 mysqli,在初学者中也是最难理解的环节。
以后必须用PDO吗?
现在的程序员,入门之后多数都在使用框架。
框架自己封装了模型层,已经不需要你自己去编写连接过程。通过查询构造器,连SQL语句都不用你写了,所以是不是用PDO,你也不太能感觉的到。
PS:有些同学觉得用框架很恐慌,其实完全没必要。编程最重要的是思想,至于基础知识等你进阶以后,分分钟就补回来。
PDO 扩展库基本情况
PDO 类
用来创建和管理数据库连接,以及执行SQL。
PDOStatement 类
它有两个功能, 和 (相当于 mysqli_result 对象)
PDOException 异常类
使用PDO的过程中,发生任何错误都会抛出该错误类型。其中包括了错误信息、代码、所在文件、行数等。
数据库驱动
数据库驱动,并不是“类”,仅仅是说明文档。在PHP手册中可以找到。
描述了每个数据库特有的常量、可配置项、DNS字符串。
基本用法
连接到数据库
注意:必须捕获异常,否则容易暴露数据库账号、密码等信息
执行增删改SQL
执行SELECT查询
使用预处理语句
预处理语句,可避免SQL注入,大量执行相同SQL时(SQL结构不变,值变化),免去编译过程
销毁对象
其他语法
PDO 还能支持事务(根据数据库驱动决定),对于“大对象”还可以以stream的形式处理。
领取专属 10元无门槛券
私享最新 技术干货