PHP 上傳 Excel 或 CSV 檔案以 PDO 方式匯入 MySQL 資料庫
此須有一個上傳頁面將檔案上傳到後端與 PHP 處理程式頁同目錄內,及一個後端的 PHP 處理程式頁來將 Excel 或 CSV 檔案以 PDO 方式匯入 MySQL 資料庫,且需先在 MySQL 內自行建立資料表及欄位。(此為笨兔自己記錄參考用,若有需者就參考!若有錯誤或其它方法,請自行更正唄!)
本小站下載
: PHPExcel<html>
<head>
<meta charset="utf-8">
<title>PHP 上傳檔案建置</title>
</head>
<body>
<form action="html_058_1.php" method="post" enctype="multipart/form-data"> 檔案名稱:<input type="file" name="myfile" accept=".xls"><br>
<input type="submit" name="submit" value="上傳檔案">
</form> ps:上傳檔案名稱必需為 html_058_1.php 內設的檔名,此設 abc.xls,且檔內格式需有固定欄位,詳見下面說明。 </body>; </html>
<?php //pdo連接資料庫
$dbhost = "伺服器名稱"; $dbuser = "使用者帳號"; $dbpass = "使用者密碼"; $dbname = "資料庫名稱"; try{ $dsn = "mysql:host=".$dbhost.";dbname=".$dbname.";charset=utf8"; $conn= new PDO($dsn, $dbuser, $dbpass); //發生錯誤出現錯誤提醒 $conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ //發生錯誤結束資料庫連線並顯示錯誤訊息 die($e -> getMessage()); } require_once 'PHPExcel/Classes/PHPExcel.php'; //必導入的PHPExel move_uploaded_file($_FILES["myfile"]["tmp_name"],"test/".$_FILES["myfile"]["name"]); //將上傳的檔案從暫存資料夾以同名稱移到網站資料夾中 //須先在您的MySQL建立對應的資料表及欄位名 //改您要上傳匯入的完整路徑檔案名稱 (放在同目錄內) $file = "abc.xls"; try { $objPHPExcel = PHPExcel_IOFactory::load($file); } catch(Exception $e) { die('Error loading file "'.pathinfo($file,PATHINFO_BASENAME).'": '.$e->getMessage()); } $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); foreach($sheetData as $key => $col) { if ($key != 1){ //0表示從Excel第一行開始讀取,1從第二行,EXCEL若有欄名就需從第二行開始) $a = array(); foreach ($col as $colkey => $colvalue) { array_push($a,$colvalue); } //匯入每筆資料,此例是四個欄位(由0開始),若五欄則數字漸增加入如 $a4=addslashes($a[4]); 以此類推 $a0=addslashes($a[0]); $a1=addslashes($a[1]); $a2=addslashes($a[2]); $a3=addslashes($a[3]); $total = $total + 1; //計算共匯入幾筆,可不用 //INTO 後面改您的建立好的資料表名稱,() 內改您的資料表欄位名稱 //VALUES() 內加入上面您抓取幾個欄位代號 $sql =("INSERT INTO 資料表名稱 (`資料表欄位1`,`資料表欄位2`,`資料表欄位3`,`資料表欄位4`) VALUES ('$a0','$a1','$a2','$a3')"); $rs = $conn -> exec($sql); } } ?> <html>
<head>
<meta charset="utf-8">
<title>PHP EXCEL 匯入 MySQL資料庫</title>
</head>
<body>
<div>總共 <?php echo $total;?> 筆資料匯入完成!</div> </body> </html>