首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 操作 MySQL 輸出 XML:自訂 CMySQLXML 類別完整實作與 DOMXML 操作詳解

     編輯:MySQL 資料庫相關知識

環境準備(Windows PHP 4.3.4 + MySQL 4.0.16)

  1. 安裝 PHP Installer。
  2. 解壓 iconv.dll 至 C:\Windows\System32。
  3. 建立 C:\PHP\extensions,放入 php_domxml.dll。
  4. 編輯 php.ini:
    extension_dir = "C:\PHP\extensions"
    extension=php_domxml.dll(移除分號)。
  5. 重啟 IIS / Apache。

CMySQLXML 類別原始碼

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("<root/>");  // 建立空文件
        $root = $doc->document_element();

        while ($row = mysql_fetch_assoc($result)) {
            $table_name = mysql_field_table($result, 0);
            $row_elem = $doc->create_element($table_name);
            $row_elem = $root->append_child($row_elem);

            $num_fields = mysql_num_fields($result);
            for ($i = 0; $i < $num_fields; $i++) {
                $field_name = mysql_field_name($result, $i);
                $col_elem = $doc->create_element($field_name);
                $col_elem = $row_elem->append_child($col_elem);
                $text = $doc->create_text_node($row[$field_name]);
                $col_elem->append_child($text);
            }
        }

        mysql_free_result($result);
        mysql_close($conn);
        return $doc->dump_mem(false);  // 回傳 XML 字串
    }
}

使用範例

$xml = new CMySQLXML('localhost', 'user', 'pass', 'test');
header('Content-Type: text/xml; charset=utf-8');
echo $xml->run_sql_return_XML('SELECT * FROM users');

關鍵點解析

  • domxml_open_mem 建立記憶體 DOM 文件,根節點自訂(此處 <root/>)。
  • 逐列建立 <table_name> 節點,欄位對應子節點,值存文字節點。
  • 回傳 dump_mem(false) 為不格式化 XML 字串;true 會縮排。
  • PHP 5+ 建議改用 DOMDocument + mysqli/PDO,domxml 已棄用。

現代化重寫建議(PHP 7/8)

class MySQLToXML {
    private PDO $pdo;
    public function __construct(string $dsn, string $user, string $pass) {
        $this->pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
    }
    public function queryToXML(string $sql): string {
        $stmt = $this->pdo->query($sql);
        $dom = new DOMDocument('1.0', 'UTF-8');
        $root = $dom->createElement('resultset');
        $dom->appendChild($root);
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $rowElem = $dom->createElement('row');
            $root->appendChild($rowElem);
            foreach ($row as $col => $val) {
                $colElem = $dom->createElement($col);
                $colElem->appendChild($dom->createTextNode((string)$val));
                $rowElem->appendChild($colElem);
            }
        }
        return $dom->saveXML();
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved