架構概覽
ListTable.php:列出資料庫所有表供使用者勾選。
Backup.php:將選定表資料查詢並序列化為 XML 檔案。
ListTable.php 關鍵代碼
$conn = mysql_connect('localhost', 'root', 'password');
$tables = mysql_list_tables('資料庫名', $conn);
while ($row = mysql_fetch_array($tables)) {
echo " {$row[0]}
";
}
Backup.php 核心邏輯
$conn = mysql_connect('localhost', 'root', 'password');
$query = "SELECT * FROM $table";
$result = mysql_db_query('資料庫名', $query, $conn);
$xml = '';
$xml .= "<{$table}s>";
while ($row = mysql_fetch_array($result)) {
$xml .= "<$table>";
$fields = mysql_list_fields('資料庫名', $table, $conn);
for ($i = 0; $i < mysql_num_fields($fields); $i++) {
$fname = mysql_field_name($fields, $i);
$xml .= "<$fname>{$row[$i]}$fname>";
}
$xml .= "$table>";
}
$xml .= "{$table}s>";
$filename = "$table.xml";
file_put_contents($filename, $xml);
echo "資料表 $table 已備份成功!";
特點與限制
- 優點:XML 結構化、跨平台、可被多種語言解析、人眼可讀。
- 缺點:檔案體積較 SQL 大、大量資料序列化效能差、需自行處理特殊字元跳脫(CDATA)。
- 還原端需對應解析 XML 並產生
INSERT 或 LOAD DATA,本文未贅述。
改進建議
- 改用
mysqli 或 PDO(mysql_* 函數已棄用)。
- 大表採用游標分批讀取,避免記憶體耗盡。
- XML 編碼建議統一 UTF-8,並對輸出值執行
htmlspecialchars 或包裹 CDATA。
- 備份檔加入 Schema 版本、時間戳、資料庫名稱等中繼資料。