PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口。PDO与mysqli曾经被建议用来取代原本PHP在
用的mysql相关函数,基于数据库使用的安全性,因为后者欠缺对于SQL资料隐码的防护。
并不能使用PDO扩展本身执行任何数据库操作,必须使用一个database-specific PDO driver(针对特定数据库
的PDO驱动)访问数据库服务器。PDO并不提供数据库抽象,它并不会重写SQL或提供数据库本身缺失的功能,
如果你需要这种功能,你需要使用一个更加成熟的抽象层。PDO需要PHP5核心OO特性的支持,所以它无法运行于
之前的PHP版本。
在Unix环境下PHP5.1以上版本中:
如果你正在使用PHP5.1版本,PDO和PDO SQLITE已经包含在了此发行版中;当你运行configure时它将自动启用。
推荐你将PDO作为共享扩展构建,这样可以使你获得通过PECL升级的好处。推荐的构建支持PDO的PHP的configure
line应该也要启用zlib。你也应该启用你选择的数据库的PDO驱动 ;关于这个的更多信息请查看database-
specific PDO drivers ,但要注意如果你将PDO作为一个共享扩展构建,你必须也要将PDO驱动构建为共享扩展。
SQLite扩展依赖于PDO,所以如果PDO作为共享扩展构建,SQLite也应当这样构建
./configure --with-zlib --enable-pdo=shared --with-pdo-sqlite=shared --with-sqlite=shared
将PDO安装为一个共享模块后,你必须编辑php.ini文件使得在PHP运行时自动载入PDO扩展。你同样需要启用
那儿的特定数据库驱动;确保他们列出在 pdo. so 行之后,因为PDO必须在特定数据库驱动载入之前初始化。
如果你是以静态方式构建的PDO和特定数据库驱动扩展,你可以跳过这一步。
extension=pdo. so
让PDO作为一个共享的模块将使你可以在新版PDO发布时运行 pecl upgrade pdo 命令升级,而不用强制你重新
构建整个PHP。注意如果你是这样做的,你也需要同时升级你的特定数据库驱动。
在windows环境下PHP5.1以上版本中:
PDO和主要数据库的驱动同PHP一起作为扩展发布,要激活它们只需简单的编辑php.ini文件:
extension=php_pdo.dll
然后,选择针对特定数据库的DLL文件使用 dl() 在运行时加载,或者在php.ini文件中 php_pdo.dll 行后启用
它们,如:
extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
这些DLL文件应当存在于系统的 extension_dir 目录里。
注意 PDO_INFORMIX 只能作为一个PECL扩展使用。
========================================================================================
PHP 5.1 发布时将附带一个全新的数据库连接层,即 PHP Data Objects (PDO)。虽然 PHP 一直都拥有很好
的数据库连接,但 PDO 让 PHP 达到一个新的高度。学习如何获得、安装和使用 PDO,以连接到 IBM? DB2?
Universal Database? 和 IBM Cloudscape? 数据库,插入和检索数据,并探索更多高级特性,例如预处理语句
(prepared statements)、绑定参数(bound parameters)、可滚动游标(scrollable cursors)、定位更新
(positioned updates)以及 LOB。
随着拥有更成熟 OO 语法的 PHP 5 的发布,PHP 越来越多地受到越来越大的机构的关注,对于 PHP 来说,提供
更加一致的和可访问的数据访问 API 变得越来越重要。
PHP 与流行的开放源代码关系数据库管理系统(RDBMS)MySQL 之间总是很有默契。这对拍档的成功很大程度上
是由于它们免费可用,而且进入的门槛也比较低,这两种产品的合作使它们各自都取得了广受推崇的地位。
很多 PHP 应用程序开发人员都习惯于 PHP-MySQL 这对组合,以致 PHP 对其他数据库的支持常常模仿 MySQL
客户机库 API。然而,并不是所有的数据库客户机 API 都是一样的,也不是所有的数据库都提供相同的特性。
虽然存在模仿,但不同的 PHP 数据库扩展都有它们各自的怪僻和不同之处,所以从一种数据库迁移到另一种数据库
时会有一些困难。虽然这不是创建 PDO 的直接原因,但是在设计过程中还是有一定影响的。
如果您是带着想结合使用 PHP 和 DB2 的目的阅读本文,那么您很可能属于以下类型中的一种:
您从一家小公司开始,在 MySQL(举个例子)上运行 PHP,由于业务增长,您需要 DB2 所提供的可伸缩性/可靠性
/支持或其他特性。您希望移植代码,以使用 DB2,但由于 API 的变化,您需要编写或实现一个抽象层,以便在
DB2 上测试应用程序的同时可以继续在旧的数据库上运行。不仅如此,您还希望能有自己的选择,并保留支持其他
RDBMS 的可能性,因为您清楚,有些客户机可能已经和其他平台栓在一起了。
您用 PHP 在 MySQL之上构建了一个小型的部门应用程序(同样,这只是举个例子,我并不是要跟 MySQL 过不去)。
事实证明这个应用程序本身很有用,现在已经在这个部门之外使用,并且闯入了 CIO/CTO 的法眼 —— 现在需要
遵从托管的标准数据库。(是的,这是第一点的一个变种。) 在其他某些复杂的企业级应用程序的后台,您已经
有一个 DB2 实例;您希望利用 PHP 的快速应用程序开发和原型设计来生成动态报告。
execute 主要执行dml语句 执行一条预处理语句
prepare 预处理语句
exec 执行一条sql语句,并返回受影响的行数