喵喵笨兔 の 喵喵的家~遊戲天地 - 首頁(上版面)
喵喵笨兔 の 喵喵的家~遊戲天地 - 首頁(左版面)
首  頁 最新消息 遊戲攻略 遊戲影片 遊戲圖片 下載區 學習分享 留言板 FB粉絲團
 喵喵笨兔 の 喵喵的家~遊戲天地 - PHP 上傳 Excel 或 CSV 檔案以 PDO 方式匯入 MySQL 資料庫

PHP 上傳 Excel 或 CSV 檔案以 PDO 方式匯入 MySQL 資料庫

 此須有一個上傳頁面將檔案上傳到後端與 PHP 處理程式頁同目錄內,及一個後端的 PHP 處理程式頁來將 Excel 或 CSV 檔案以 PDO 方式匯入 MySQL 資料庫,且需先在 MySQL 內自行建立資料表及欄位。(此為笨兔自己記錄參考用,若有需者就參考!若有錯誤或其它方法,請自行更正唄!)

  • 上傳頁面範例:上傳頁預設名為 html_058.html 基本上如下 ^ ^。後端處理程式頁為 html_058_1.php
  • <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>
    ※ 必要參數 ※
  • <form> 內:
    action="後端的PHP處理程式頁":笨兔預設 html_058_1.php,所以輸入此囉!
    method="post":必須為 post。
    enctype="multipart/form-data":必須為 multipart/form-data,代表您要上傳檔案。也就是上傳檔案到後端與 html_058_1.php 同目錄內。
  • <input> 內:
    type="file":必須為 file,即上傳檔案的欄位型式。
    name="自取名稱":此名稱對應後端PHP處理程式頁的參數。
    accept="檔案類型":此可不用,但要上傳是 Excel 檔,所以就設 .xls,若要上傳 CSV 檔就設 .csv。
  • 後端PHP處理程式範例:html_058_1.php 基本上如下 ^ ^
  • <?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>
  • 資料表若有 5 個欄位,但只要匯入其中三個欄位。則 EXCEL 檔內就設三個欄位即可,只要將其對應 (VALUES) 到要匯入的欄位即可。
  • 匯入的資料會接續在原來的資料後面。若原資料表內有十筆資料,Excel 內有三筆匯入,則變成第 11 至 13 筆,以此類推。

笨兔隨手筆記於 2021/4/18

喵喵笨兔 の 喵喵的家~遊戲天地
http://vv0817.tk
http://vv0817.gq
http://vv0817.ga
http://vvv.nde.tw
http://vvv.lionfree.net
https://vv0817.neocities.org
http://qo3op.asuscomm.com/vvv