创建 DB2 数据库表
Xajax 应用程序从一个 DB2 数据库表中检索数据。可以用一个 PHP 脚本创建这个数据库表。创建一个 PHP 脚本 createTable.php。定义用于用户名和密码的变量:
$password = 'db2admin';
使用 PDO 构造函数获得与 DB2 SAMPLE 数据库的连接:
$connection = new PDO('odbc:SAMPLE', $user, $password);
默认情况下,PDO 构造函数创建一个非持久的连接。如果连接成功,则 PDO 构造函数返回一个 DB2 数据库连接资源。当连接成功时,输出消息为 “Connection succeeded”。当数据库连接失败时,会输出连接错误消息。定义用于创建一个表的 SQL 语句:
Journal VARCHAR(25), Section Varchar(25), Edition
VARCHAR(25), Title Varchar(45), Author Varchar(25))";
使用 exec() 函数运行该 SQL 语句:
$connection->exec($createtable);
定义用于向表中添加一行的 SQL 语句:
'XML', 'July 2006', 'The Java XPath API', 'Elliotte Harold')";
使用 exec() 函数运行该 SQL 语句:
这样就在数据库表中添加了一行。输出消息,以表明被添加的行数:
类似地,将另外一行添加到数据库表 Catalog 中:
'XML', 'October 2005', 'JAXP validation', 'Brett McLaughlin')";
$result=$connection->exec($addrow);
清单 1 中显示了 PHP scriptcreateTable.php。将 createTable.php 复制到 C:/Apache2/Apache2/htdocs 目录。启动 Apache Web 服务器(如果没有启动的话)。在一个浏览器中通过 URL http://localhost/createTable.php 运行这个 PHP 脚本。这样将生成一个数据库表 DB2.Catalog,并向这个表中添加数据。
清单 1. createTable.php
try {
$user = 'db2';
$password = 'db2admin';
$connection = new PDO('odbc:SAMPLE', $user, $password);
echo "Connection succeededn";
$createtable = "CREATE TABLE DB2.Catalog(CatalogId VARCHAR(25),
Journal VARCHAR(25), Section Varchar(25), Edition
VARCHAR(25), Title Varchar(45), Author Varchar(25))";
$connection->exec($createtable);
$addrow = "INSERT INTO DB2.Catalog VALUES('catalog1', 'IBM developerWorks',
'XML', 'July 2006', 'The Java XPath API',
'Elliotte Harold')";
$result=$connection->exec($addrow);
print("Added $result rows.n");
$addrow = "INSERT INTO DB2.Catalog VALUES('catalog2', 'IBM developerWorks',
'XML', 'October 2005', 'JAXP validation',
'Brett McLaughlin')";
$result=$connection->exec($addrow);
} catch (PDOException $e) {
$e->getMessage();
}
?>
发送一个请求
现在我们来开发包含一个输入表单的示例应用程序。输入表单收集用于将一个类别条目添加到数据库表 Catalog 中的数据。当用户开始在输入字段 Catalog Id 中输入数据时,一个 XMLHttpRequest HTTP 请求被发送到服务器,以验证添加的 Catalog Id 的值。如果数据库中还没有定义 Catalog Id,则显示消息 “Catalog Id is Valid”。如果数据库中已经定义了这个 Catalog Id,则显示消息 “Catalog Id is not Valid”,同时禁用 Create Catalog 按钮,Catalog Id 的字段值被添加到表单中。
xajax PHP 对象在客户机应用程序与服务器之间起中介的作用。首先,将 xajax 类库包括进来:
创建一个 xajax 对象:
服务器端的处理由 PHP 函数来执行。创建 PHP 函数 validateCatalogId($formValues) 和 updateCatalog($formValues)。这两个函数都带有一个 $formValues 参数:
function updateCatalog($formValues){}
使用 reGISterFunction() 方法将这些 PHP 函数注册到 xajax 对象。xajax 对象为可能从 PHP 脚本或输入表单事件处理程序中调用的 PHP 函数创建包装器函数。
$xajax->registerFunction("updateCatalog");
Xajax 为注册的 PHP 函数生成异步包装器函数。包装器函数名称的格式为 xajax_phpfunction。 变量 phpfunction 是要为之定义包装器函数的一个服务器端 PHP 函数。Xajax 通过 getFormValues(string formId) 方法提供异步表单处理。 通过使用 getFormValues() 方法,可以将表单字段值数组作为参数提交给一个 xajax 异步包装器函数。 还可以使用 getFormValues(string formID ,boolean submitDisabledElements, string prefix]) 函数提交表单的一部分,而不是提交整个表单。prefix 参数指定只有以该前缀开头的表单元素应该被提交。布尔参数 submitDisabledElements 指定是否提交被禁用的元素。PHP 函数 validateCatalogId 和 updateCatalog 为表单字段值数组定义了一个参数。在发出 XMLHttpRequest 之前,用 processRequests() 函数指定用于处理请求的 xajax 对象:
此外还在输入表单的 标记中指定,在服务器返回 XML 响应之后,xajax 应该生成任何需要的 JavaScript:
?>
客户机应用程序发出一个 XMLHttpRequest。在示例应用程序中,XMLHttpRequest 是由输入字段 catalogId 的 onkeyup 事件处理程序发出的:
size="20"
id="catalogId"
name="catalogId"
autocomplete="off"
onkeyup="xajax_validateCatalogId(xajax.getFormValues
('validationForm'));"></td>
<td><div id="validationMessage"></div></td>
</tr>
输入字段调用包装器函数 xajax_validateCatalogId,调用时以表单字段值数组作为参数。包装器函数将一个 XMLHttpRequest 发送到服务器。xajax 对象接收 XMLHttpRequest,并调用相应的 PHP 函数 validateCatalogId($formValues)。
处理请求
Xajax 提供 xajaxResponse 类,用于将响应发送回客户机应用程序。在 validateCatalogId 函数中,创建一个 xajaxResponse 对象:
validateCatalogId 函数验证添加到输入表单中的 Catalog Id 值。从 $formValues 数组中,检索 catalogId 字段的值:
接下来,使用 PHP PDO 扩展连接到 DB2 数据库,并判断 Catalog 表中是否为输入表单中输入的 catalog id 值定义了一行。