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

PHP 執行 SQL 檔案匯入資料庫:自動化部署腳本實作

     編輯:PHP 相關知識

基本實作(mysqli)

<?php
$sqlFile = 'install.sql';
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = 'password';
$dbName = 'myapp';

$mysqli = new mysqli($dbHost, $dbUser, $dbPass);
if ($mysqli->connect_errno) {
    die('連線失敗: ' . $mysqli->connect_error);
}

$sql = file_get_contents($sqlFile);
$statements = array_filter(array_map('trim', explode(';', $sql)));

foreach ($statements as $stmt) {
    if ($stmt === '') continue;
    if (!$mysqli->query($stmt)) {
        die("SQL 執行失敗: {$mysqli->error}\nSQL: $stmt");
    }
}

$mysqli->close();
echo "匯入完成\n";

進階:支援自訂資料庫名稱

SQL 檔中移除 CREATE DATABASE ...; USE ...;,改由 PHP 動態建立:

$mysqli->query("CREATE DATABASE IF NOT EXISTS `$dbName` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
$mysqli->select_db($dbName);

大檔案/生產環境優化

  • 串流處理:用 fopen() + fgets() 逐行讀取,組裝完整語句再執行,避免 file_get_contents 佔用大量記憶體。
  • 事務包裹:$mysqli->autocommit(false) → 執行 → $mysqli->commit(),失敗 rollback()。
  • 多語句支援:mysqli::multi_query() 可一次發送多條語句,需循環 next_result() 清理結果集。
  • 編碼一致性:$mysqli->set_charset('utf8mb4'),SQL 檔儲存為 UTF-8 無 BOM。

PDO 版本(推薦)

<?php
$pdo = new PDO("mysql:host=$dbHost;charset=utf8mb4", $dbUser, $dbPass, [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
]);
$pdo->exec("CREATE DATABASE IF NOT EXISTS `$dbName` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
$pdo->exec("USE `$dbName`");

$sql = file_get_contents($sqlFile);
foreach (array_filter(array_map('trim', explode(';', $sql))) as $stmt) {
    $pdo->exec($stmt);
}
echo "PDO 匯入完成\n";

部署整合建議

  1. 將腳本封裝為 php install.php --sql=install.sql --db=myapp CLI 指令。
  2. 結合 Git Hook / CI/CD:composer install → php install.php → phpunit。
  3. 記錄執行日誌、版本號、回滾 SQL(可選)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved