GORAGOD.com

Import CSV to MySQL

ไฟล์ CSV เป็นไฟล์ excel ชนิดหนึ่ง นอกเหนือจาก XLS ที่ใช้การเก็บข้อมูลแบบ Text (สามารถเปิดอ่านได้โดย Notepad) การอ่านข้อมูลจากไฟล์ CSV เลยค่อนข้างง่าย

ไฟล์ CSV มาตรฐาน จะมีรูปแบบดังนี้ครับ
  • เป็นข้อความ (text) 
  • รหัสอักขระตามภาษาท้องถิ่น เช่น ภาษาไทยจะใช้ TIS-620 หรือ Windows-874
  • แยกข้อมูลแต่ละแถวด้วยการขึ้นบรรทัดใหม่
  • แยกข้อมูลแต่ละคอลัมน์ด้วย , (ลูกน้ำ)
  • ข้อมูลจะอยู่ภายในเครื่องหมาย "..." (อัญญประกาศน์) หรือ '...' (ฟันหนู) หรือไม่มีอะไรครอบเลยก็ได้
ตัวอย่างข้อมูลไฟล์ CSV มาตรฐาน
"r1c1","r1c2","r1c3"
"r2c1","r2c2","r2c3"
"r3c1","r3c2","r3c3"

การอ่านข้อมูลจากไฟล์ CSV เข้าฐานข้อมูล 
<?php
// โหลดไฟล์ CSV
$f = @fopen('grade.csv', 'r');
if ($f) {
  // อ่านข้อมูลออกเป็นแอเรย์ ทีละแถว ด้วย fgetcsv
  while (($datas = fgetcsv($f)) !== false) {
    $save = array();
    foreach ($datas as $item) {
      // แปลงอักขระเป็น UTF-8
      // ถ้ามั่นใจว่าข้อมูลนี้ไม่ใช่ภาษาไทยแน่ๆ สามารถข้ามคำสั่ง iconv ได้
      //  $save[] = $item
      $save[] = iconv('TIS-620', 'UTF-8', $item);
    }
    // SQL Query
    $sql = 'INSERT INTO `table` VALUES ("'.implode('","', $save).'")';
    // เขียนคำสั่ง query ข้อมูลที่นี่
  }
  fclose($f);
}
?>

ตัวอย่างนี้เป็นการอ่านข้อมูลจากไฟล์ grade.csv และ Import เข้าฐานข้อมูลที่เป็น UTF-8 ด้วยฟังก์ชั่น fgetcsv() ของ PHP
  • เนื่องจาก ไฟล์ CSV มาตรฐานถ้าเป็นภาษาไทย รหัสอักขระจะเป็น TIS-620 หรือ Windows-874 ดังนั้น ก่อนการนำเข้าต้องแปลงให้เป็น UTF-8 ก่อนด้วย iconv()
  • สำหรับข้อมูลบางฟิลด์ที่ไม่เป็นภาษาไทยแน่ๆ เราสามารถเขียนคำสั่งเพื่อข้ามการแปลงอักขระได้ (ไม่ต้องใช้ iconv() กับข้อมูลนี้)
  • สำหรับไฟล์ excel ที่เป็น XLS หากเราต้องการนำมา Import ด้วยวิธีนี้ เราสามารถทำการแปลงฟอร์แมตไฟล์ได้ด้วย Excel โดยการ Save As ให้เป็นชนิด CSV
  • ตัวอย่างนี้ไม่ได้รวมเอาการบันทึกข้อมูลลงฐานข้อมูลไว้ ให้เขียนคำสั่งในส่วนนี้ด้วยตัวเอง