我承認我不是PHP的領導者。然而,在看了一些PHP的資訊之後,我認為有一些功能需要添加到其中來處理資料庫連接和整合XML。要做到這一點,我想我可以建立一個處理串連MySQL和使用PHP中的domxml功能來提供XML輸出的類。然後我就可以在PHP指令碼的任何地方聲明這個類並且在需要使用它的時候可以提供XML功能。
我假設人們使用PHP是原因是他的標價:免費。MySQL為需要向系統中增加資料庫功能的開發人員提供一個免費的資料庫解決方案。這些解決方案的缺點是在設定和管理的時候有些複雜。
我在這篇文章中使用的PHP版本是PHP 4.3.4 for Win32,可以從The PHP Group下載。MySQL的版本是MySQL 4.0.16 for Win32,可以從MySQL.com得到。MySQL的安裝很容易——只要簡單地按照其指令來就可以了。PHP稍微有一點複雜。
在PHP的下載頁面有兩個檔案:一個ZIP檔案和一個安裝檔案。因為我們需要添加ZIP檔案中的擴充,所以這兩個檔案都要下載。下面是下載之後的所要做的一個簡單步驟:
1. 使用安裝檔案安裝PHP。
2. 解壓iconv.dll,將其放到Windows的系統檔案夾中。
3. PHP安裝目錄下建立一個目錄(預設為C:\PHP)“extensions”。
4. 解壓php_domxml.dll檔案到這個目錄。
5. 在Windows檔案夾下找到php.ini檔案,然後使用記事本或其它文字編輯器開啟。在這個檔案中找到“extensions_dir=”,然後將其值修改為第3步設定的擴充檔案夾的完整路徑。
6. 找到“;extension=php_domxml.dll”,刪除本行開頭的分號。
7.重新啟動Web伺服器。
然後在你的Web目錄下使用下面的代碼建立一個PHP頁面“test.php”。(這段代碼在運行IIS 5.0的Windows 2000 SP3能夠正常運行。)
<?php
$myxml = new CMySqlXML("localhost", "test_user", "password", "test");
echo $myxml->run_sql_return_xml("SELECT * FROM users");
classCMySqlXML {
var $host;
var $user;
var $password;
var $db;
functionCMySqlXML($host, $user, $password, $db) {
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->db = $db;
}
functionrun_sql_return_xml($sql_string) {
$connection = mysql_connect($this->host, $this->user, $this->password,
$this->db);
mysql_select_db($this->db);
$result = mysql_query($sql_string);
$doc = domxml_open_mem("<root/>");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$num_fields = mysql_num_fields($result);
$row_element = $doc->create_element(mysql_field_table($result, 0));
$doc_root = $doc->document_element();
$row_element = $doc_root->append_child($row_element);
for ($i = 0; $i < $num_fields; $i++) {
$field_name = mysql_field_name($result, $i);
$col_element = $doc->create_element($field_name);
$col_element = $row_element->append_child($col_element);
$text_node = $doc->create_text_node($row[$field_name]);
$col_element->append_child($text_node);
}
}
mysql_free_result($result);
mysql_close($connection);
return $doc->dump_mem(false);
}
}
這個例子要求你在MySQL上有一個資料庫“test”,其中有一個表“users”。而且,你還需要為訪問測試資料庫上的資料建立一個使用者。建立資料庫、表等的步驟可以查看MySQL的文檔。
如果你分析一下代碼,你就會明白我建立了一個叫做CMySqlXML的類。CMySqlXML建構函式接受四個參數:MySQL的主機名稱,一個合法的使用者名稱,一個密碼和一個資料庫名字。建構函式使用這四個參數設定類的host、user、password和db成員變數。
該類提供的唯一的一個方法是run_sql_return_xml()。它接受一個SQL查詢字串參數。當這個方法執行的時候,它建立一個到MySQL資料庫的串連並選擇資料庫。查詢字串被執行,結果儲存到變數$result中。使用domxml_open_mem()函數建立一個新的DOMDocument對象。然後,代碼開始迴圈結果集中的所有記錄。對於每一條記錄,添加一個與結果集的表同名的行元素到DOMDocument文件項目中。然後為每個欄位添加一個元素到行元素中,元素名為欄位名。最後,一個文本節點被添加到每個欄位節點,節點的值為該欄位的值。
在迴圈所有行之後,代碼釋放結果集並關閉串連。產生的DOMDocument XML從函數中返回。
在PHP頁面的開始處你會看到CMySqlXML對象被執行個體化,run_sql_return_xml()方法被調用。這個方法的傳回值被返回給客戶。domxml功能除了PHP函數命名規範之外都遵守DOM規範。
如果需要更多有關DOM規範的資訊,可以訪問W3C的網站。而更多domxml的資訊則可以從The PHP Group找到,在這裡你可以下載不同格式的文檔。
--------------------------------------------------------------------------------
本文作者: Phillip Perkins是Ajilon Consulting的簽約人。他的經驗很豐富,從機器控制和客戶/伺服器到企業內部網應用。