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

PHP 直接匯入 Excel (xls/xlsx) 到 MySQL 完整實作碼

     編輯:MySQL 資料庫相關知識

專案需求常遇到「使用者上傳 Excel,後端直接寫入 MySQL」的情境。網路上多建議先另存為 CSV 再匯入,但其實可用 PHP-ExcelReader 直接讀取 xls/xlsx,避免中間轉檔與編碼問題。以下提供經測試可直接使用的完整程式碼。

環境需求

  • MySQL 採用 utf8 編碼
  • Excel 檔為 .xls (Excel 97-2003) 或 .xlsx (Excel 2007+)
  • 需引用 reader.php 與 oleread.inc (可從 SourceForge PHP-ExcelReader 專案下載)

核心程式碼 (test.php)

<?php
require_once 'reader.php';

// 1. 讀取 Excel
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('utf-8');   // 輸出編碼與資料庫一致
$data->read('data.xls');             // 你的 Excel 檔案

// 2. 連線資料庫
$db = @mysql_connect('localhost', 'root', '123456') 
      or die("Could not connect to database.");
mysql_query("SET NAMES 'utf8'");     // 關鍵:避免中文亂碼
mysql_select_db('mydb');

error_reporting(E_ALL ^ E_NOTICE);

// 3. 逐列寫入 (假設 Excel 有 3 個欄位)
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
    $sql = "INSERT INTO `test` VALUES (
        '".mysql_real_escape_string($data->sheets[0]['cells'][$i][1])."',
        '".mysql_real_escape_string($data->sheets[0]['cells'][$i][2])."',
        '".mysql_real_escape_string($data->sheets[0]['cells'][$i][3])."'
    )";
    echo $sql . "<br>";
    mysql_query($sql);
}
?>

關鍵細節說明

  1. 編碼一致性:`setOutputEncoding('utf-8')` + `SET NAMES 'utf8'` + 資料庫 utf8,三者一致才不會亂碼。
  2. 防 SQL Injection:務必使用 mysql_real_escape_string() 處理每個欄位值。
  3. 欄位對應:陣列索引 [$i][1] 從 1 開始,對應 Excel 第 1 欄 (A 欄)。
  4. 擴充性:若欄位數不固定,可改用雙層迴圈動態組合 SQL。

常見問題排查

  • 「Class 'Spreadsheet_Excel_Reader' not found」→ 確認 reader.php 路徑正確、oleread.inc 同目錄。
  • xlsx 讀取失敗 → 確認 PHP 環境已安裝 php_zip、php_xml 擴充,或改用 PhpSpreadsheet (現代替代方案)。
  • 大量資料匯入逾時 → 考慮分批次、調大 max_execution_time 或改用 CLI 模式執行。

提醒:mysql_* 函式已棄用,正式專案建議改用 mysqli 或 PDO 搭配 PhpSpreadsheet 實作。

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