新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > DB2教程 > 正文:利用DB2 9原生XML和PHP来简化XML应用程序

利用DB2 9原生XML和PHP来简化XML应用程序

新客网 XKER.COM 2006-08-27 来源: 收藏本文


CREATE PROCEDURE getProduct(IN id VARCHAR(10))

DYNAMIC RESULT SETS 1

LANGUAGE SQL

BEGIN

BEGIN

DECLARE c_cur CURSOR WITH RETURN FOR

SELECT XMLSERIALIZE(XMLQUERY(for $i in $t/product

let $thumb := $i/description/images/image[@type="thumbnail"]

let $name := $i/description/name/text()

let $details := $i/description/details/text()

let $price := $i/description/price

let $size := $i/description/size

return



{$name}



{ for $j in $i/description/images/image[@type != "thumbnail"][1] return




src="data/images/{$thumb}.jpg"

width="200"/>



}



Details: {$details}

Price: ${$price/text()}

Size: {$size/text()} {$size/@units/text()}


>Click here to Buy





{ for $j in $i/description/images/image[@type != "thumbnail"]

[position() != 1] return




onMouseout="document.mainPic.src=

data/images/{$i/description/images/image[@type !=

"thumbnail"][1]}.jpg''">







}





PASSING T.DESCRIPTION AS "t" RETURNING

SEQUENCE) AS CLOB(32K))

FROM xmlproduct T WHERE Pid = id;

OPEN c_cur;

END;

END


注意: XQuery 中的与号需要进行转义。这适用于所有特殊字符。

重点: 因为 XQuery 处理 XML 类型,所以所有返回的数据都将对特殊字符进行转义。解决此问题的一种方法是使用转型函数将查询的返回数据转型为 VARCHAR。

应用程序代码


$stmt = db2_prepare($conn, "CALL getProduct(?)");

db2_execute($stmt, array($pid));

list($product) = db2_fetch_array($stmt);

echo $product;


应用程序代码现在简化为对存储过程和将结果输出到浏览器的任务的简单调用。现在大多数应用程序代码都在数据库服务器中维护和运行。发现的另一个事实是,从存储过程查询数据比直接从代码执行查询简单,至少与其一样简单。

非 XML RDBMS

虽然可以在关系情况下创建存储过程,但对于这种情况可能会复杂得多。
  1. 从产品表获取产品详细信息:



    $stmt = db2_prepare($conn, "SELECT P.Name, P.Details, P.Price,

    P.Size, I.Location, I.Alias FROM

    sqlproduct P, sqlimages I WHERE P.Pid = ? AND

    P.Pid = I.Pid AND I.Type = ? FETCH FIRST

    ROW ONLY");

    db2_execute($stmt, array($pid, full'));

    list($prodName, $prodDetails, $prodPrice, $prodSize, $prodImgThumb,

    $prodImgAlias) = db2_fetch_array($stmt);


  2. 现在通过在数据周围放置 HTML 标记创建显示:













    通过使用 构造,可以在这里混合 PHP 和 HTML 代码:




    Details:

    Price: $

    Size:

    Click here to Buy





  3. 查询与此产品关联的图像并将其 URL 添加到输出 Web 页中:




    $stmt = db2_prepare($conn, "SELECT DISTINCT(Location)

    FROM sqlimages WHERE Pid = ?

    AND Type = ? AND NOT Location = ?");

    db2_execute($stmt, array($pid, full', $prodImgThumb));

    while(list($prodImg) = db2_fetch_array($stmt)) {

    ?>








    }

    ?>





因为产品数据已经分割到两个表中,且 PHP 和 HTML 代码已经混合,我们需要进行两个单独查询来获取产品详细信息和图像位置。

购物车

购物车是任何在线商店不可缺少的一部分。因此,它是一个适合创建为 Web 服务的实用程序。可定制此 Web 服务来计算价格、税款、币种换算、运输成本等等。在我们的实现示例中,已经使用 PHP 和 XQuery 创建了 Web 服务,可以进行价格和税款计算。

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐