科技行者

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

知识库

知识库 安全导航

至顶网软件频道利用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

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

用户单击种类或品牌时列出货品

用户单击特定种类或品牌时,将生成该种类或品牌中所有货品的列表。列表中的每个货品都有简短描述和到缩略图像的 URL。此列表显示在主页中并在其中进行格式设置。


图 6. 某一种类中的货品列表
某一种类中的货品列表


DB2 Viper
在 DB2 中,XQuery 不仅创建列表,而且还将其转换为 HTML 输出,从而浏览器可以直接使用。使用 XQuery 的此功能,不仅可以推出业务逻辑,而且可以发布到数据库服务器,从而有效地使中间层应用程序非常简单。这正是使用 PHP 而不使用 Java™ 或 VS .NET® 的原因。


$xquery =for $i in $t/product
let $thumb := $i/description/images/image[@type="thumbnail"]
where $i/description/category = " . htmlentities($category) . "
return




{$i/description/name}


;
$stmt = db2_prepare($conn, "SELECT XMLSERIALIZE(XMLQUERY(
$xquery' PASSING BY REF T.DESCRIPTION AS \"t\"
RETURNING SEQUENCE) AS CLOB(32K)) FROM xmlproduct AS t");
db2_execute($stmt);
while(list($product) = db2_fetch_array($stmt)){echo $product;}

查看上面的应用程序代码,我们注意到 PHP 代码减少为两行,而数据库查询包含大部分逻辑。
注意: 我们需要对使用 HTML 实体的任何传入 CGI 变量(如种类)进行转义,从而它们在插入 XQuery 时不包含任何非法的非转义实体。

虽然 XQuery 可以进行发布转换,但在许多情况下可能不适合进行此操作。由于设计、性能和样式原因,可能更适合于在中间层或客户机中使用 XSLT 转换来创建最终的 Web 页。在许多情况中,将两个查询捆绑为一个查询会更方便。使用 XQuery 并不阻止开发人员使用 XSLT 进行转换。我们在此的尝试将显示 XQuery 不仅可以进行数据搜索,而且可以对数据运行复杂业务逻辑和转换。

非 XML RDBMS
首先查询数据库以获取与所选种类匹配的所有货品的行集:


$sql = "SELECT P.Pid, P.Name, I.Location FROM sqlproduct P, sqlimages I
WHERE P.Category = ? AND I.Pid = P.Pid AND I.Type = ?");
$stmt = db2_prepare($conn, $sql);
db2_execute($stmt, array($category, "thumbnail"));

然后在结果集中循环并使用 PHP 代码创建 Web 页:


while(list($prodPid, $prodName, $prodImg) = db2_fetch_array($stmt)) {
?>






}
?>

虽然发布代码与 XQuery 中的非常相似,一个显著区别就是此代码在中间层中运行和维护,而不是在数据库服务器中。所以如果 XQuery 在数据库服务器中注册为存储过程,其维护将作为数据库的一部分。我们将在下一步中进行此操作。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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