專案需求常遇到「使用者上傳 Excel,後端直接寫入 MySQL」的情境。網路上多建議先另存為 CSV 再匯入,但其實可用 PHP-ExcelReader 直接讀取 xls/xlsx,避免中間轉檔與編碼問題。以下提供經測試可直接使用的完整程式碼。
reader.php 與 oleread.inc (可從 SourceForge PHP-ExcelReader 專案下載)<?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);
}
?>
mysql_real_escape_string() 處理每個欄位值。[$i][1] 從 1 開始,對應 Excel 第 1 欄 (A 欄)。reader.php 路徑正確、oleread.inc 同目錄。php_zip、php_xml 擴充,或改用 PhpSpreadsheet (現代替代方案)。max_execution_time 或改用 CLI 模式執行。提醒:mysql_* 函式已棄用,正式專案建議改用 mysqli 或 PDO 搭配 PhpSpreadsheet 實作。