在開發安裝程式、資料備份還原或自動化部署流程時,常需將 .sql 腳本檔案匯入 MySQL 資料庫。本文提供一個健壯、可直接使用的 PHP 範例,支援多行敘述、註解過濾與錯誤處理。
<?php
// 資料庫連線設定
$filename = 'churc.sql';
$mysql_host = 'localhost';
$mysql_username = 'root';
$mysql_password = '';
$mysql_database = 'dump';
// 建立連線(建議改用 mysqli 或 PDO)
$conn = mysql_connect($mysql_host, $mysql_username, $mysql_password)
or die('資料庫連線失敗: ' . mysql_error());
mysql_select_db($mysql_database)
or die('選擇資料庫失敗: ' . mysql_error());
// 讀取整個 SQL 檔案
$lines = file($filename);
$templine = '';
foreach ($lines as $line) {
// 跳過註解行與空行
if (substr($line, 0, 2) == '--' || $line == '') continue;
$templine .= $line;
// 以分號判斷敘述結束
if (substr(trim($line), -1, 1) == ';') {
mysql_query($templine)
or print('執行查詢錯誤: ' . $templine . ': ' . mysql_error() . '
');
$templine = '';
}
}
echo "資料表匯入成功";
?>
file() 將檔案讀入陣列,逐行處理,避免大檔案佔用過多記憶體。-- 開頭的單行註解與空行。$templine 累積直到遇到分號 ;,再一次送出查詢,正確處理跨行的 CREATE TABLE、INSERT 等複雜敘述。原範例使用已棄用的 mysql_* 函式,實際專案建議改用 PDO 或 mysqli:
PDO::exec() 或 mysqli::multi_query() 可簡化流程。BEGIN/COMMIT/ROLLBACK)確保資料一致性。