PHP 为老手开发人员提供了创建一些强大的 Web 解决方案的工具。而且,它还可以通过扩展添加额外的功能,从而使得创建解决方案更加容易。
PHP Extension and Application Repository (PEAR) 是一个帮助开发人员通过 API 或包(package)创建解决方案的框架。PEAR 还是一个分布式系统,该系统提供了自动安装这些包的一个方法。在这篇文章中,我将着重强调我认为其中最重要的一个包:DB 包。
DB 包是一个面向对象风格的抽象层,是对 PHP 的底层数据库连接和查询的抽象;与 PHP 4 和 PHP 5 兼容。DB 包目前支持以下扩展:dbase、fbsql、interbase、informix、msql、mssql、mysql、mysqli、oci8、odbc、pgsql、sqlite和 Sybase。
如果用过mysql_* 函数添加和查询MySQL数据库,那么你可以熟悉它所提供的不同的结果集(resultsets)。最常用的两个结果集要么是一个数组,在这个数组中每个域(field)是一个被索引的元素,要么是一个组合数组,其中每个字段是一个键/值(key/value)对。PEAR DB 提供这两个结果集,以及一个对象类型,这个对象类型创建一个动态对象,其中每个域作为对象的一个属性。在 Windows 平台下使用 ADO 连接的开发人员可能会很熟悉组合数组和对象类型。
在 ADO 中,结果集(或者记录集(Recordset))是作为一个可导航的行集合返回的。每一行是 Field 对象的一个集合。每个 Field 对象都有一个 Name 和一个 Value 属性(也就是字段的名称和那个所包含的数据)。下面在 PHP 中访问字段数据的一个例子:
require_once("DB.php");
$dsn = "mysql://username:password@localhost/database";
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$res =& $db->query("SOME SQL STRING");
$row =& $res->fetchRow();
echo $row['field1'];
下面是如何在 VBScript 中使用 ADO 来实现:
Dim conn, rs
Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
conn.ConnectionString = "some connection string"
Set rs.ActiveConnection = conn
rs.Open "SOME SQL STRING"
Response.Writers.Fields("field1").Value
你可以看到这两种方法具有相似之处。首先,要建立一个到数据库的连接。然后,发出一个查询并接收一个结果集。像 ADO 一样,PEAR DB 包提供对所有与数据库服务通信相关的低层结果的抽象。
如果你是 PEAR 新手,那么你可能需要了解如何在你自己的系统上实现包。作为一个抽象系统,PEAR 可以使你很容易地实现包。我对承载 Web 站点的机器没有太多的控制权,只能限于通过 FTP 和一个由主机供应商所提供的“控制面板”来管理我自己的虚拟主机。
在安装 PEAR 之前,先将这段脚本复制到主机系统上的一个 PHP 文件中。我在主机默认 Web 目录中创建了一个叫做 install 的目录,并将这个脚本复制到了一个叫做 go-pear.php的文件中。然后将目录权限改成了允许访问安装脚本。之后我从浏览器中进入了go-pear.php installer 页面,由脚本完成剩下的事情。在这些都做完之后,我通过一个链接进入了 Web package installer,更改了配置选项(通过 configuration 链接进入),然后开始安装这些包,安装过程没有出现问题。
注:我是在一个支持 PHP 4.3.8 和MySQL 4.0.20 标准的主机站点上运行 installer 和 PHP 脚本的。服务器操作系统是 Linux 2.4.21-15.ELsmp,Web 服务器是 Apache 1.3.31。