首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 依表備份 PHP 實作:動態產生 DROP/CREATE/INSERT 完整 SQL 腳本

     編輯:MySQL 綜合教學

前言

針對單表備份需求,本文提供 PHP 函數 datatosql(),動態讀取表結構與資料,產出可直接執行的完整 SQL 腳本(含 DROP TABLE IF EXISTS、CREATE TABLE、批次 INSERT)。

完整 PHP 實作

<?php
function datatosql($table) {
    global $db;  // 假設 $db 為資料庫連線物件(mysqli/PDO)

    // 1. 取得建表 SQL
    $result = $db->query("SHOW CREATE TABLE `$table`");
    $row = $db->fetch_array($result);
    $tableDump = "DROP TABLE IF EXISTS `$table`;\n";
    $tableDump .= $row[1] . ";\n\n";  // Create Table 陳述式

    // 2. 讀取所有資料
    $rows = $db->query("SELECT * FROM `$table`");
    $numFields = $db->num_fields($rows);
    $numRows = $db->num_rows($rows);

    // 3. 產生 INSERT 陳述式
    while ($row = $db->fetch_array($rows)) {
        $tableDump .= "INSERT INTO `$table` VALUES(";
        $comma = "";
        for ($i = 0; $i < $numFields; $i++) {
            $tableDump .= $comma . "'" . mysqli_real_escape_string($db, $row[$i]) . "'";
            $comma = ",";
        }
        $tableDump .= ");\n";
    }
    $tableDump .= "\n";

    return $tableDump;
}
?>

關鍵點解析

  • SHOW CREATE TABLE 取得完整 DDL(含引擎、字符集、索引)。
  • mysqli_real_escape_string 防止特殊字元破壞 SQL。
  • 逐行組裝 INSERT,適合中小表;大表建議 mysqldump 或分批處理。
  • 回傳字串可直接寫入 .sql 檔或管線導入。

改良建議(現代化)

// 使用 PDO 預處理 + 交易批次
$stmt = $pdo->prepare("INSERT INTO `$table` VALUES (".str_repeat('?,', $numFields-1)."?)");
$pdo->beginTransaction();
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
    $stmt->execute($row);
    if ($count++ % 1000 === 0) $pdo->commit();  // 分批提交
}
$pdo->commit();

相關延伸閱讀

  • MySQL SHOW 指令用法介紹
  • 七種 MySQL 表類型
  • MySQL 聯結查詢一覽
  • MySQL 隨機查詢優化實例
  • MySQL 排序使用情況
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved