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

PHP 實作 MySQL 單表備份腳本:產生可直接還原的 SQL 檔

     編輯:MySQL 資料庫相關知識

核心邏輯

  1. 查詢 `SHOW CREATE TABLE` 取得建表 DDL。
  2. 查詢全表資料,逐行組合 `INSERT INTO ... VALUES (...)`。
  3. 欄位值經 `mysql_real_escape_string()` 轉義,防止 SQL 注入與特殊字元破壞。

完整函數程式碼

<?php
function datatosql($table) {
    global $db;  // 假設 $db 為 mysql 連線資源

    $dump = "DROP TABLE IF EXISTS `$table`;\n";
    $create = mysql_query("SHOW CREATE TABLE `$table`", $db);
    $row = mysql_fetch_array($create);
    $dump .= $row[1] . ";\n\n";

    $rows = mysql_query("SELECT * FROM `$table`", $db);
    $num_fields = mysql_num_fields($rows);
    $num_rows = mysql_num_rows($rows);

    while ($row = mysql_fetch_array($rows)) {
        $dump .= "INSERT INTO `$table` VALUES(";
        $comma = "";
        for ($i = 0; $i < $num_fields; $i++) {
            $dump .= $comma . "'" . mysql_real_escape_string($row[$i]) . "'";
            $comma = ",";
        }
        $dump .= ");\n";
    }
    $dump .= "\n";
    return $dump;
}
?>

使用範例

$sql = datatosql('users');
file_put_contents('backup_users_'.date('Ymd').'.sql', $sql);

注意事項

  • 僅適用 MyISAM/InnoDB 邏輯備份,大表會佔用大量記憶體(建議改用 `mysqldump`)。
  • 不含 Stored Procedure、Trigger、View 等物件。
  • 還原時直接 `mysql -u root -p db < backup.sql` 或 `SOURCE backup.sql;`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved