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

PHP 匯入 phpMyAdmin 匯出 SQL 檔的簡易實作

     編輯:PHP 綜合知識

適用場景

適用於安裝精靈、資料庫部署腳本,需程式化執行 phpMyAdmin 匯出的 .sql 檔案。

核心步驟

  1. 讀取 SQL 檔內容
  2. 移除註解行
  3. 替換資料表前綴(如 ct_ → 系統設定前綴)
  4. 以正則分離 CREATE TABLE 與 INSERT 陳述式
  5. 逐條執行 SQL

完整程式碼(使用 mysqli 改良版)

<?php
$dbFile = 'install.sql';
$tablePrefix = 'myapp_'; // 目標前綴

// 1. 讀取並轉碼(視檔案編碼調整)
$content = file_get_contents($dbFile);
$content = iconv('UTF-8', 'UTF-8', $content); // 確保編碼一致

// 2. 移除註解
$content = preg_replace('/--.*\n/U', '', $content);
$content = preg_replace('/\/\*.*?\*\//s', '', $content); // 區塊註解

// 3. 替換前綴(假設原始前綴為 ct_)
$content = str_replace('ct_', $tablePrefix, $content);

// 4. 分割 SQL 陳述式(簡易版,以分號結尾分割)
$statements = array_filter(array_map('trim', explode(';', $content)));

// 5. 執行
$mysqli = new mysqli('localhost', 'user', 'pass', 'dbname');
if ($mysqli->connect_errno) {
    die('DB 連線失敗: ' . $mysqli->connect_error);
}

foreach ($statements as $sql) {
    if (empty($sql)) continue;
    if (!$mysqli->query($sql)) {
        error_log("SQL 執行失敗: $sql\n錯誤: " . $mysqli->error);
        // 視需求決定是否中止
    }
}
$mysqli->close();

原始版本(mysql_* 函數,已棄用)

$dbfile = "test.sql";
$content = iconv("UTF-8","GB2312", file_get_contents($dbfile));
$content = preg_replace("/--.*\n/iU","",$content);
$content = str_replace("ct_", TABLE_PRE, $content);

$carr = $iarr = [];
preg_match_all("/Create table .*\(.*\).*\;/iUs", $content, $carr);
foreach ($carr[0] as $c) @mysql_query($c, $link);

preg_match_all("/INSERT INTO .*\(.*\)\;/iUs", $content, $iarr);
foreach ($iarr[0] as $c) @mysql_query($c, $link);

注意事項

  • 編碼一致性:確保 SQL 檔、資料庫連線、PHP 檔案編碼一致(建議全 UTF-8)。
  • 大檔案效能:大量 INSERT 考慮使用 mysqli_multi_query 或 LOAD DATA INFILE。
  • 安全性:僅信任來源可靠的 SQL 檔,避免注入風險。
  • 正則限制:複雜 SQL(含觸發器、存儲過程、多行字串)可能無法正確分割,生產環境建議使用專門 SQL 解析器。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved