WEB开发网
开发学院数据库DB2 使用 DB2 pureXML 和 PHP 构建 Support Knowledge... 阅读

使用 DB2 pureXML 和 PHP 构建 Support Knowledge Base(上)

 2010-02-25 00:00:00 来源:WEB开发网   
核心提示: 这个 SELECT 语句中的所有数据均检索自类别表,该表包含一个 XML 类型的名为 data 的列,使用 DB2 pureXML 和 PHP 构建 Support Knowledge Base(上)(9),清单 6 从该列获取 <name> XML 标记并将其映射为一个关系列名,结

这个 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; 
  } 
... 

上一页  4 5 6 7 8 9 10  下一页

Tags:使用 DB pureXML

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接