utf8mb4下載 Spreadsheet_Excel_Reader (含 reader.php、oleread.inc):
require_once 'reader.php';
setOutputEncoding('utf-8'); // 輸出編碼與 DB 一致
$data->read('data.xls'); // 讀取 Excel
$db = mysqli_connect('localhost', 'root', '123456', 'mydb') or die("Connect failed: " . mysqli_connect_error());
mysqli_set_charset($db, 'utf8mb4');
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
// 假設 Excel 前三欄對應 table 欄位
$col1 = mysqli_real_escape_string($db, $data->sheets[0]['cells'][$i][1]);
$col2 = mysqli_real_escape_string($db, $data->sheets[0]['cells'][$i][2]);
$col3 = mysqli_real_escape_string($db, $data->sheets[0]['cells'][$i][3]);
$sql = "INSERT INTO test (col1, col2, col3) VALUES ('$col1', '$col2', '$col3')";
if (!mysqli_query($db, $sql)) {
error_log("Row $i insert failed: " . mysqli_error($db));
}
}
mysqli_close($db);
echo "Import done.";
?>
setOutputEncoding('utf-8') 確保讀取後編碼與資料庫一致,避免亂碼。mysqli_real_escape_string 防止 SQL 注入 (或改用 Prepared Statements)。mysqli_multi_query 批次執行或 LOAD DATA 配合 CSV 中轉。PHPExcel/PhpSpreadsheet 的 chunk 讀取模式。gmdate('Y-m-d', ($excelDate - 25569) * 86400) 轉換。