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

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

新客网 XKER.COM 2006-08-27 来源: 收藏本文
  • 每个产品的图像 URL 需要存储在单独的图像表中:



    $images = array();

    foreach($dom->description->images->image as $image) {

    switch((string) $image[type']) {

    case thumbnail':$prodImgThumb = (string) $image;

    $prodImgAlias = (string) $image[alias'];

    if(!$prodImgAlias) $prodImgAlias = NULL;

    $stmt = db2_prepare($conn, "INSERT INTO sqlimages (Pid, Type, Alias, Location) VALUES (?, ?, ?, ?)");

    db2_execute($stmt, array($prodID, thumbnail', $prodImgAlias, $prodImgThumb));

    case full':

    $prodImgFull = (string) $image;

    $prodImgAlias = (string) $image[alias'];

    if(!$prodImgAlias) $prodImgAlias = NULL;

    $stmt = db2_prepare($conn, "INSERT INTO sqlimages (Pid, Type, Alias, Location) VALUES (?, ?, ?, ?)");

    db2_execute($stmt, array($prodID, full', $prodImgAlias, $prodImgFull));

    }

    }


  • 当前实现 ibm_db2 驱动程序不能适当地将 NULL 变量作为参数来处理,以便执行函数;因此我们使用一个非强制性解决方案:



    if(!$prodBrand) $prodBrand = " ";

    if(!$prodCategory) $prodCategory = " ";

    if(!$prodImgFull) $prodImgFull = " ";


  • 现在保存产品表中的产品信息:



    $stmt = db2_prepare($conn, "INSERT INTO sqlproduct (Pid, Name, Details, Brand,

    Category, Price, Weight, Size, Description) VALUES

    (?, ?, ?, ?, ?, ?, ?, ?, ?)");

    db2_execute($stmt, array($prodID, $prodName,

    $prodDetails, $prodBrand, $prodCategory,

    $prodPrice, $prodWeight, $prodSize, $fileContents));


  • 创建主页

    主页包含在线商店中所有可用产品的种类和品牌的索引。索引的右边区域显示所有货品的列表。

    图 5. 主页

    主页

    创建种类和品牌的索引列表

    索引通过查询数据库中所有产品的惟一种类和品牌的列表而创建。启动应用程序时将创建此列表。

    DB2 Viper
    1. 首先创建 DB2 视图,以使用 XQuery 列出种类,XQuery 在所有产品中循环并返回所有惟一种类:


      CREATE VIEW Categories(Category) AS SELECT DISTINCT(XMLCAST(

      XMLQUERY(for $i in $t/product/description/category return $i'

      PASSING BY REF T.DESCRIPTION AS "t" RETURNING SEQUENCE)

      AS VARCHAR(128))) FROM

      xmlproduct AS t


    2. 现在从应用程序调用该视图:


      $stmt = db2_exec($conn, "SELECT * FROM Categories");

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

      echo "$cat

      "; }


    非 XML RDBMS

    从产品表创建种类的惟一列表:


    $stmt = db2_exec($conn, "SELECT DISTINCT(category) FROM SQLPRODUCT");

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

    echo "$cat

    ";}


    这两种情况中的应用程序代码相似。创建 XML 数据视图使我们可以轻松地查询视图,从而有助于从应用程序代码理解产品 XML 的结构。需要更改视图中的 XQuery 以查找品牌元素,同样 SQL 调用也需要查看 Brand 列。

    模式演化对索引列表的影响

    根据客户反馈,我们需要允许用户浏览站点,以查找镀银的货品或由纯银制造的货品。我们看一下向索引中添加子种类对以下各项的影响:XML 模式、关系模式、查询和 PHP 应用程序代码。

    对 XML 模式和文档实例的影响

    向产品 XML 模式中的种类元素添加新属性(catx)。产品的所有新 XML 文档现在都用纯银或镀银适当地填充了此属性:

    Miscellaneous

    对关系模式的影响
    • DB2 Viper

      这将不需要对关系模式进行任何更改,因为 XML 文档存储在单个列中。
    • 非 XML RDBMS

      在基本关系数据库中,将需要更改产品表的模式,添加名为 catx 的另一列。这可能涉及删除并重新插入所有产品文档。
    对查询的影响
    • DB2 Viper 创建索引所需的 XQuery 将发生变化以在条件中包含这个新属性。同样,用于根据索引中的选择列出货品 XQuery 也将发生变化来包括新条件。

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