本文讲述了模式演化对应用程序的影响,并通过使用情景向用户说明设置 PHP 环境的容易程度;将DB2原生XML 功能与PHP应用程序(包括用PHP和 XQuery编写的Web服务)集成的容易程度。
非 XML RDBMS
- 在关系版本中,必须执行一个查询来获取每个采购订单中产品的列表:
$stmt = db2_prepare($conn, "SELECT POid, POrder FROM sqlporder ORDER BY POid DESC"); db2_execute($stmt); while(list($POid, $po) = db2_fetch_array($stmt)) { |
- 因为采购订单在关系数据库中存储为 CLOB,我们必须使用 DOM 访问订单日期和各个产品。PHP 5 的 SimpleXML 功能在此会再次派上用场。
$dom = simplexml_load_string($po); ?>
Order # placed on foreach($dom->items->item as $item) { |
- 对于每个产品,必须查询详细信息,在本例中查询其名称:
$stmt2 = db2_prepare($conn, "SELECT Name FROM sqlproduct WHERE Pid = ?"); db2_execute($stmt2, array( (string) $item[pid'] )); while(list($prodName) = db2_fetch_array($stmt2)) { ?>
x @ $
} } } |
XML 索引 虽然我们没有创建任何关系索引,但将创建一些 XML 索引来说明如何使用 DB2 原生 XML 支持从文档中的任何元素或属性创建索引。每个产品文档都有一个惟一产品 ID 以及浏览目录时常常使用的其他重要信息,包括种类、品牌和名称。对于产品 XML 列,将创建这四个索引。
CREATE UNIQUE INDEX prod_pid ON xmlproduct(description) GENERATE KEY USING XMLPATTERN /product/@pid' AS SQL VARCHAR(10) CREATE INDEX prod_name ON xmlproduct(description) GENERATE KEY USING XMLPATTERN /product/description/name' AS SQL VARCHAR(128) CREATE INDEX prod_category ON xmlproduct(description) GENERATE KEY USING XMLPATTERN /product/description/category' AS SQL VARCHAR(128) CREATE INDEX prod_brand ON xmlproduct(description) GENERATE KEY USING XMLPATTERN /product/description/brand' AS SQL VARCHAR(128) |
正如您可以看到的,可以从属性以及元素创建索引。
设置运行应用程序的环境 设置 Apache 和 PHP 首先需要设置 PHP 开发环境和 Web 服务器来运行服务器端 PHP 脚本。这些说明是围绕 Windows 的,但是代码也可以在 Linux 和其他类似 UNIX 的平台上运行,而不需要更改。有关如何设置使用 Apache 来设置 PHP 模块的信息,请参考 PHP 文档。
- 确保安装了 DB2 Version 8.2 或更高版本客户机库。
- 从 http://httpd.apache.org/ 下载并安装 Apache 最新的 2.0 版。对于开发工作,最好不要将 Apache 安装为服务,因为您会发现将频繁地重新启动它。启动 Apache 并导航到 http://localhost/,以确保 Apache 正在运行。
- 下载 PHP 5 的最新稳定版本的 zip 包,然后将其解压缩到 c:\php。
- 从同一页面下载 PECL(PHP Extension Community Library,PHP 扩展公共库)模块集合。将此 zip 文件解压缩到 c:\php\ext。
- 将 c:\php\php.ini-dist 复制到 c:\php\php.ini,然后用编辑器将其打开。
-
- 查找 extension_dir 设置并将其更改为:
extension_dir = "c:/php/ext/"
- 查找 Dynamic Extensions 部分并添加下列行:
extension=php_ibm_db2.dll
extension=php_soap.dll
- 用编辑器打开 Apache 的配置文件 httpd.conf。
-
- 查找 Dynamic Shared Object (DSO) Support 部分,在 LoadModule 指令列表的后面添加下列行:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "c:/php"
- 查找 DirectoryIndex 指令,将 index.php 添加到列表中:
DirectoryIndex index.php index.html index.html.var
- 您可能希望删除 Apache 安装的 htdocs 目录(DocumentRoot 指令的值)中包含的文件。在 htdocs 目录中创建一个新文件 info.php,内容为:
- 启动 Apache 并导航到 http://localhost/info.php。如果向下滚动页面时看到 ibm_db2 配置,则已经成功配置了 Apache、PHP 和 ibm_db2 驱动程序!
设置应用程序代码 尝试运行附加的应用程序之前,确保具有包含 PHP 支持的 Web 环境。应用程序的前端可以在 Mozilla Firefox 中正确显示;因此,当您使用其他浏览器时可能会看到难看的页面布局。请按照以下简单步骤来设置和运行应用程序:
- 先下载本文结尾的 zip 文件,然后将其解压缩到 htdocs 目录(通常为 C:\Program Files\Apache Group\Apache\htdocs)。进入 silvercastles 目录。
- 在将要使用的数据库服务器中,创建名为 silver 的数据库。为了使 XML 功能可以与 DB2 Viper 一起使用,必须明确指定 Unicode 数据库:
CREATE DATABASE silver USING CODESET utf-8 TERRITORY us
- 如果要创建编目数据库连接,必须在本地计算机中从 DB2 Command Window 内运行以下命令:
CATALOG TCPIP NODE myNode REMOTE serverAddr SERVER serverPort
CATALOG DB silver AT NODE myNode
确保用数据库服务器的主机名或 IP 地址及其 TCP/IP 端口(SVCENAME 数据库管理器配置变量)分别替换 serverAddr 和 serverPort。如果未在服务器中设置 SVCENAME 变量,需要将其设置为空闲端口,然后重新启动 DB2:
$ db2 UPDATE DBM CFG USING SVCENAME 12345
$ db2stop ; db2start
- 编辑 config.php 并修改适当的值。如果需要,一定要对某些字符进行转义,因为您在修改实际的 PHP 代码。
-
- $basedir:silvercastles 目录的路径(使用正斜线,以避免对路径进行转义,如 C:/Program Files/Apache Group/Apache/htdocs/silvercastles)
- $dbname:数据库名称
- $dbuser:允许连接数据库的用户名称
- $dbpass:用户密码
如果使用编目数据库连接,则执行到步骤 3。另外,还需要修改以下值:
-
- $dbhost:数据库服务器的主机名或 IP 地址
- $dbport:服务器的端口号
- 保存配置并将浏览器指向 http://localhost/setup.php,以创建 XML 和关系表并插入数据。单击 Continue 链接访问在线商店。