科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道利用DB2 9原生XML和PHP来简化XML应用程序

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讲述了模式演化对应用程序的影响,并通过使用情景向用户说明设置 PHP 环境的容易程度;将DB2原生XML 功能与PHP应用程序(包括用PHP和 XQuery编写的Web服务)集成的容易程度。

作者:Hardeep Singh 来源:IT专家网 2008年6月5日

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件
有趣的是,以上 XQuery 与用于显示购物车内容的 XQuery 相似:


$stmt = db2_prepare($conn, "SELECT XMLSERIALIZE(XMLQUERY($xquery' PASSING BY REF
T.PORDER AS \"t\" RETURNING SEQUENCE) AS CLOB(32K)) FROM
xmlporder AS t WHERE POid = ?");
db2_execute($stmt, array($id));
list($po) = db2_fetch_array($stmt);
echo $po;

还请注意,PHP 应用程序代码量达到最少,因为大部分业务逻辑和转换位于查询中。

非 XML RDBMS

  1. $stmt = db2_prepare($conn, "SELECT POrder FROM sqlporder WHERE POid = ?");
    db2_execute($stmt, array($id));
    $sum = 0.0;
    while(list($po) = db2_fetch_array($stmt)) {

  2. 因为采购订单存储为 CLOB,我们需要使用 DOM 访问每个产品及其数量和价格。使用简单 DOM 从采购订单中提取数据:

    $dom = simplexml_load_string($po);
    foreach($dom->items->item as $item) {
    $cpid = (string) $item[pid'];
    $price = (float) $item[price'];

  3. 跟踪 HTML 表每一行中的总价:

    $sum += $price * (integer) $item[quantity'];

  4. 需要进行单独查询来查找每个货品的名称。

    }
    }
    }

    $stmt2 = db2_prepare($conn, "SELECT Name FROM sqlproduct WHERE Pid = ?");
    db2_execute($stmt2, array($cpid));
    if($stmt2) {
    list($prodName) = db2_fetch_array($stmt2); ?>





    $

代码的关系版本向应用程序引入了较多的逻辑。

报告客户的订购历史记录
客户可以单击索引中的 Order history 链接,列出他们的所有采购订单:


图 10. 订购历史记录
订购历史记录


DB2 Viper

  1. 使用 SQL/XML 返回按日期排序的客户采购订单。对于每个采购订单,都将执行一个 XQuery,返回每个产品小计的格式化结果。

    $xquery =
    for $po in $t/purchaseOrder
    let $items := for $item in $po/items/item
   2. 在 XQuery 内执行联接以显示每个产品的名称,因为采购订单仅存储产品 ID、价格和数量:


let $name := for $i in db2-fn:xmlcolumn("XMLPRODUCT.DESCRIPTION")/product
where $i/@pid = $item/@pid return $i/description/name/text()
return

{xs:string($item/@quantity)} x @ ${xs:string($item/@price)} {$name}


return

Order #{xs:string($po/@id)} placed on {xs:string($po/@orderDate)}


{$items}
;
$stmt = db2_prepare($conn, "SELECT XMLSERIALIZE(XMLQUERY
($xquery' PASSING BY REF
T.PORDER AS \"t\" RETURNING SEQUENCE) AS CLOB(32K))
FROM xmlporder AS t
ORDER BY POid DESC");
db2_execute($stmt);
while(list($po) = db2_fetch_array($stmt)) {
echo $po; }

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章