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

Access 匯入 MySQL 程式化實戰:PHP 讀取文字檔逐筆寫入

     編輯:MySQL 綜合教學

整體流程

  1. Access 匯出文字檔(CSV/逗號分隔)
  2. MySQL 建立同結構表
  3. PHP 腳本讀取文字檔 → 解析 → 批次 INSERT

Access 匯出關鍵點

  • 格式:CSV,分隔符 `,`,包裹 `"`
  • 檔名:`ipadress.txt`(範例)
  • 每行一筆,無標題行

MySQL 建表

CREATE TABLE ipaddress (
    area_h VARCHAR(50),
    area_f VARCHAR(50),
    address VARCHAR(255)
);

PHP 匯入腳本(含錯誤處理與進度)

<?php
$file = 'ipadress.txt';
if (!is_readable($file)) die('檔案不存在或不可讀');

$lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$total = count($lines);
echo "共 $total 筆記錄,開始匯入...<br>";

$mysqli = new mysqli('localhost', 'root', '', 'cht');
if ($mysqli->connect_errno) die('連線失敗: ' . $mysqli->connect_error);
$mysqli->set_charset('utf8');

$stmt = $mysqli->prepare('INSERT INTO ipaddress (area_h, area_f, address) VALUES (?, ?, ?)');
if (!$stmt) die('Prepare 失敗: ' . $mysqli->error);

$success = 0;
foreach ($lines as $i => $line) {
    $fields = explode(',', $line);
    if (count($fields) !== 3) {
        echo "第 " . ($i+1) . " 行欄位數異常,跳過:$line<br>";
        continue;
    }
    // 去除包裹引號與首尾空白
    $fields = array_map(function($v) { return trim($v, '" \t'); }, $fields);

    $stmt->bind_param('sss', $fields[0], $fields[1], $fields[2]);
    if ($stmt->execute()) {
        $success++;
    } else {
        echo "第 " . ($i+1) . " 行寫入失敗: " . $stmt->error . "<br>";
    }

    // 每 100 筆輸出進度
    if (($i+1) % 100 === 0) echo "已處理 " . ($i+1) . " 筆...<br>";
}

$stmt->close();
$mysqli->close();
echo "<br>匯入完成:成功 $success / $total 筆。";
?>

關鍵改進點(對比原始碼)

  • 使用 `mysqli` + 預處理 → 防注入、效能佳
  • `FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES` → 乾淨陣列
  • 欄位數驗證、引號清理、錯誤記錄、進度回報
  • 批次大量資料時可改 `mysqli_multi_query` 或 `LOAD DATA INFILE` 更快

大量資料替代方案

// 直接用 LOAD DATA INFILE(最快)
$sql = "LOAD DATA INFILE 'ipadress.txt'
        INTO TABLE ipaddress
        FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
        LINES TERMINATED BY '\n'
        (area_h, area_f, address)";
$mysqli->query($sql);

需確保 MySQL `secure_file_priv` 允許讀取該路徑,或將檔案放入指定目錄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved