使用 DB2 pureXML 和 PHP 构建 Support Knowledge Base(上)
2010-02-25 00:00:00 来源:WEB开发网这个 SELECT 语句中的所有数据均检索自类别表。该表包含一个 XML 类型的名为 data 的列。清单 6 从该列获取 <name> XML 标记并将其映射为一个关系列名。结果被放到一个名为 x 的虚构表中,这使结果可以被查询的其余部分访问。
清单 6. 将 <name> 标记映射为一个关系列名
XMLTABLE('$d/category' PASSING c.data AS "d"
COLUMNS name VARCHAR(200) PATH 'name') AS x
这允许您访问 <name> 标记的内容,就好象您有一个典型的关系数据库列一样。
创建 Article 类
另一个需要创建的应用程序类是 Article 类。清单 7 包含了 article.php 文件的一个片段,其中定义了 Article 类。要获得完整的类定义,可以从 下载 部分下载源代码。将您的 article.php 文件保存到项目的 classes 子目录中。
清单 7. 来自 article.php 文件的片段
...
function save() {
$sql = "";
if($this->id) {
$sql = "UPDATE article SET data = (XMLDOCUMENT(XMLELEMENT(NAME
\"article\", XMLCONCAT("
. " XMLELEMENT(NAME \"title\", ".$this->db->safe_no_html
($this->title)."), "
. " XMLELEMENT(NAME \"content\", ".$this->db->safe_no_html
($this->content)."))))), "
. " category_id = $this->category_id, date_modified = CURRENT
TIMESTAMP WHERE id = $this->id";
} else {
$sql = "INSERT INTO article(date_created, date_modified, view_count,
category_id, data) VALUES ( "
. " CURRENT TIMESTAMP, CURRENT TIMESTAMP, 0, $this->category_id,
(XMLDOCUMENT(XMLELEMENT(NAME \"article\", XMLCONCAT("
. " XMLELEMENT(NAME \"title\", ".$this->db->safe_no_html
($this->title)."), "
. " XMLELEMENT(NAME \"content\", ".$this->db->safe_no_html
($this->content)."))))))";
}
$result = $this->db->query($sql);
if($result) return true;
else return false;
}
...
function getArticlesBySearchTerm($search_term) {
$search_term = strtolower(trim($search_term));
$sql = 'SELECT a.id, x.title, a.date_created, a.view_count FROM article a, '
. ' XMLTABLE(\'$d/article\' passing a.data as "d" '
. ' COLUMNS title VARCHAR(200) PATH \'title\', '
. ' content VARCHAR(4000) PATH \'content\') as x '
. ' WHERE LOWER(x.title) LIKE \'%'.$this->db->safe_no_html
($search_term, false).'%\' '
. ' OR LOWER(x.content) LIKE \'%'.$this->db->safe_no_html
($search_term, false).'%\' '
. ' ORDER BY x.title';
$result = $this->db->query($sql);
$rows = array();
while($row = $this->db->get_row($result)) {
$rows[] = array($row[0], $row[1], $row[2], $row[3]);
}
return $rows;
}
...
function addComment($name, $comments, $ip_address) {
$sql = 'INSERT INTO comment(date_left, article_id, approved, data) VALUES
(CURRENT TIMESTAMP, '
. $this->getId().', 0, (XMLDOCUMENT(XMLELEMENT(NAME "comment",
XMLCONCAT('
. ' XMLELEMENT(NAME "name", \''.$this->db->safe_no_html
($name, false).'\'), '
. ' XMLELEMENT(NAME "ip_address", \''.$ip_address.'\'), '
. ' XMLELEMENT(NAME "content", \''.$this->db->safe_no_html
($comments,false).'\'))))))';
$result = $this->db->query($sql);
if($result) return true;
else return false;
}
...
更多精彩
赞助商链接