PHP 5 数据对象 (PDO) 抽象层与 Oracle
一名新 PHP 数据对象 (PDO) 数据抽象层的原始开发人员为您简要介绍该抽象层,重点讲述与 Oracle 一起运行的情况。 需要 PHP:5.0
PHP 主要是由志愿者完成的项目;尽管有少数一些固定的“核心”开发人员,但是我们没有一个人在全职受薪的开发 PHP。除此之外,我们分别位于世界不同地方,您可以想象长期开发的协调工作是何等困难。因此,PHP 主要是基于突发奇想的个人短期需求来发展的,其原因也多种多样,有的是试验,有的则是因为“明天有活要交”。尽管这样通常每一步都会改善 PHP,但从长远来看则是缺乏完整性 - 数据库扩展就是一个重要的例子。 在各种不同的数据扩展(oci、mysql、postgresql、mssql 等)之间根本没有真正的一致性,甚至在某些情况下,在这些扩展内部也没有真正的一致性。几乎所有这些扩展都在使用与基础数据库 API 紧密相连的不同代码完成着相同种类的任务。而且因为我们(PHP 核心开发人员和扩展开发人员)的人手非常有限,因此这就造成了代码更加难以维护,从而为 PHP 带来了很大的问题。 由于 PHP 越来越受欢迎并不断成功,因此主要 PHP 数据库扩展的维护者们参加了在德国举行的 LinuxTag 2003 大会,在会上我们交换了对 PHP 前景的看法。在讨论 PHP 发展的随机性时,我们确定了在 PHP 中进行数据库访问的一些目标: ·提供一种轻型、清晰、方便的 API 我们之所以提出了这种 PHP 数据对象 (PDO) 的概念,是因为我们希望通过采用 Zend Engine 2(PHP 5 的核心)先进的面向对象特性获得该 API 的一些更优秀的性能。 PHP 中的数据抽象层概念一点都算不上新;在 Google 中查询“PHP database abstraction”会找到大约 83,200 个匹配项。它几乎是许多 PHP 开发人员梦寐以求的,而其产生则部分归因于我们不完整的 API。如果您曾经尝试过使用第三方抽象层来完成任何真正重要的工作,通常会发现这些抽象层对于手头的工作来说设计的功能过于强大了 - 或者表现为在使用前需要进行大量学习,或者表现为接口速度缓慢,参数需要经过多层脚本函数调用才能到达数据库自有的 API;通常是存在上述两种表象。 为什么这些抽象层会存在这种问题?这些抽象层总是在试图完成太多的任务,甚至可能是不可能的任务。我们决定以实用为目标,仅将一些最常见的数据库 API 特性作为我们的基础,并使得 PDO 驱动程序能够将它们特定于产品的特性暴露为常规扩展函数。
如果 PDO 不是一个整体的抽象层,那还有什么别的原因值得您考虑使用它吗? ·性能。PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训。因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性。 您可能想了解 PDO 与其他常用的抽象层的对比情况,例如 PEAR DB 或 ADODB。无论在 API 方面还是在性能方面,PDO 都比其他常见抽象层要轻型,但是涉及到在各个数据库后端之间提供统一性方面,则不如那些抽象层,例如用于处理大量可移植性问题的 PEAR MDB 2 抽象层。
请注意,PDO 及其驱动程序当前处于“alpha”状态;这就意味着我们会合理保证没有重大缺陷,但是该程序包功能并不完善 - 我们还要添加很多功能。虽然我们鼓励您测试该程序包,但是实在不推荐在现阶段将其用于生产。
现在您就可以使用“pear”工具获取并安装 PDO 以及用于 PDO 的 Oracle 驱动程序了。因为 PDO 当前标记为 alpha,所以默认情况下 pear 工具不会下载该程序包。在该程序包名称后面添加后缀“-alpha”,通知该 pear 工具可以安装 alpha 版本:
您需要告知 PHP 从专用于 PHP 5 的 php.ini 文件加载 PDO 驱动程序。如果您使用的前缀与我使用的一样,PHP 则会在 /usr/local/php5/lib/php.ini 中查找 php.ini 文件。向该文件中添加以下行: extension=pdo.so 现在您需要获取数据库特定的驱动程序;对于 Oracle,此特定程序称为 PDO_OCI。在 shell 中,键入: % pear install PDO_OCI-alpha 此驱动程序也需要从 php.ini 文件加载;将下行添加到前面添加的那行之后: extension=pdo_oci.so 现在检查一下,确保它能够运行: % php -m 在模块列表中,您应该会看到 PDO 和 PDO_OCI。
在上述两种情况下,都需要首先调用“pear install”(后跟下载的真正程序包);上述示例中的版本号在本文编写之时是最新的,但随着开发的继续进行会发生变化。
(编辑:焦作站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |