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

PHP 實作大型資料庫匯出匯入:文字檔備份與還原完整程式碼

     編輯:MySQL 資料庫相關知識

應用場景

虛擬主機環境下,phpMyAdmin 匯入大型 SQL 檔常因執行時間、記憶體、上傳大小限制而失敗。採用 PHP 分批處理文字檔方式可繞過限制。

資料匯出程式

<?php
$table = 'your_table_name';
$tname = mysql_query("SELECT * FROM `$table`");
if (mysql_num_rows($tname) <= 0) exit('Table is empty');

$handle = fopen("$table.txt", 'w');
$n_s = mysql_num_fields($tname);
fputs($handle, "$n_s ");  // 寫入欄位數

for ($start = 0; $row = mysql_fetch_row($tname); $start++) {
    for ($i = 0; $i < $n_s; $i++) {
        // 特殊字元編碼:空白、Tab 替換為標記
        $row[$i] = str_replace(' ', '&&jimmy&&', $row[$i]);
        $row[$i] = str_replace("\t", '&&jimmy&&', $row[$i]);
        fputs($handle, $row[$i] . ' ');
    }
    fputs($handle, "------- PHP2000 dump data program V1.0 for MySQL -------- ");
}
fclose($handle);
echo "ostart";
?>

資料匯入程式

<?php
$table = 'your_table_name';
$rate_info = file("$table.txt");
$n_s = (int)trim($rate_info[0]);  // 讀取欄位數

for ($start = 1; $start < count($rate_info); $start += $n_s) {
    $value = '';
    for ($i = $start; $i < $start + $n_s - 1; $i++) {
        $tmp = str_replace('&&jimmy&&', ' ', trim($rate_info[$i]));
        $value .= "'" . addslashes($tmp) . "',";
    }
    $tmp = str_replace('&&jimmy&&', ' ', trim($rate_info[$start + $n_s - 1]));
    $value .= "'$tmp'";

    $query = "INSERT INTO `$table` VALUES ($value)";
    mysql_query($query);
    echo mysql_error() . " $start ";
}
echo "ostart";
?>

關鍵設計說明

  • 欄位數標記:檔案首行記錄欄位數,匯入時動態解析
  • 特殊字元處理:空白與 Tab 替換為唯一標記 &&jimmy&&,避免欄位分隔混淆
  • 分行標記:每筆資料結尾加入固定字串作為區隔
  • SQL 注入防護:匯入時使用 addslashes() 轉義
  • 分批處理:逐筆讀取、逐筆寫入,記憶體佔用恆定

改進建議(生產環境)

  1. 改用 mysqli 或 PDO 預處理語句
  2. 加入交易控制:BEGIN; ... COMMIT; 確保一致性
  3. 支援 NULL 值處理(目前空字串與 NULL 不區分)
  4. 加入進度顯示、錯誤重試、斷點續傳機制
  5. 壓縮備份檔(gzencode())節省空間
  6. 驗證資料完整性:匯出前後 CHECKSUM TABLE 比對

替代方案比較

方案優點缺點
mysqldump + source官方工具、功能完整大檔案易超時、記憶體峰值高
PHP 分批文字檔繞過限制、可控流程需自行維護、效能較慢
SELECT ... INTO OUTFILE / LOAD DATA極快、原生支援需檔案系統權限、虛擬主機常禁用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved