早期 PHP 4/5 時代,domxml 擴展提供符合 W3C DOM 標準的 XML 操作介面。本文示範如何封裝 CMySQLXML 類別,將 MySQL 查詢結果自動轉換為結構化 XML 文件,適用於早期 Web Service 或資料交換需求。
iconv.dll 放入 Windows 系統目錄。extensions 資料夾,放入 php_domxml.dll。php.ini:
extension_dir = "C:\PHP\extensions"extension=php_domxml.dll(移除前分號)。class CMySQLXML {
var $host, $user, $password, $db;
function CMySQLXML($host, $user, $password, $db) {
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->db = $db;
}
function run_sql_return_xml($sql_string) {
$conn = mysql_connect($this->host, $this->user, $this->password);
mysql_select_db($this->db, $conn);
$result = mysql_query($sql_string, $conn);
$doc = domxml_open_mem(""); // 建立空 DOMDocument
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$num_fields = mysql_num_fields($result);
$table_name = mysql_field_table($result, 0);
$row_element = $doc->create_element($table_name);
$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($conn);
return $doc->dump_mem(false); // 回傳 XML 字串
}
}
<?php
require_once('CMySQLXML.php');
$xmlObj = new CMySQLXML('localhost', 'user', 'pass', 'test');
header('Content-Type: text/xml');
echo $xmlObj->run_sql_return_xml("SELECT * FROM users");
?>
<users>
<users>
<id>1</id>
<name>John</name>
<email>john@example.com</email>
</users>
<users>
<id>2</id>
<name>Jane</name>
<email>jane@example.com</email>
</users>
</users>
PHP 5+ 建議改用 DOMDocument(內建)或 SimpleXML 搭配 PDO/MySQLi,domxml 已於 PHP 5.1 移除。現代寫法更簡潔且效能更佳。