PDO(PHPData Objects)是一种在 PHP 里连接数据库的使用接口。PDO 与 mysqli 曾经被建议用来取代原本 PHP 在用的 mysql 相关函数,基于数据库使用的安全性,因为后者欠缺对于 SQL 注入的防护。
相关概念
PHP 数据对象(PDO) 扩展为 PHP 访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个具体数据库的 PDO 驱动来访问数据库服务。
PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不提供数据库抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
从 PHP 5.1 开始附带了 PDO,在 PHP 5.0 中是作为一个PECL扩展使用。 PDO 需要 PHP 5 核心的新 OO 特性,因此不能在较早版本的 PHP 上运行。
安装配置
Unix 系统
1. 自 PHP 5.1.0 起,PDO 和 PDO_SQLITE 驱动默认可用。对于自己选择的数据库,需要启用相应的 POD 驱动。
2. 当作为一个共享模块安装 PDO 时,需要更新 php.ini 文件以便当 PHP 运行时 PDO 扩展能被自动加载。还需要在那里启用具体的数据库驱动;确保它们被列在 pdo.so 那一行之后,因为 PDO 必须在具体的 数据库扩展被载入前初始化。如果静态地构建 PDO 和 具体数据库扩展,可以跳过此步。
extension=pdo.so
程序示例
以下是一个简单的 PDO 更新交易数据库的代码,其中采用了预处理的方式将运行语句与参数隔离:
$query = “UPDATE `payment` SET `status` = ‘2’, `id` = ?, `method` = ? WHERE `payment_id` = ? and `status` = ‘1’”;
$stmt = $this -> pdo -> prepare($query);
$stmt -> bindParam(1, $id);
$stmt -> bindParam(2, $type);
$stmt -> bindParam(3, $payment_id);
$result = $stmt -> execute();
?>