Import CSV to MySQL
ไฟล์ CSV มาตรฐาน จะมีรูปแบบดังนี้ครับ
- เป็นข้อความ (text)
- รหัสอักขระตามภาษาท้องถิ่น เช่น ภาษาไทยจะใช้ TIS-620 หรือ Windows-874
- แยกข้อมูลแต่ละแถวด้วยการขึ้นบรรทัดใหม่
- แยกข้อมูลแต่ละคอลัมน์ด้วย , (ลูกน้ำ)
- ข้อมูลจะอยู่ภายในเครื่องหมาย "..." (อัญญประกาศน์) หรือ '...' (ฟันหนู) หรือไม่มีอะไรครอบเลยก็ได้
"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
- ตัวอย่างนี้ไม่ได้รวมเอาการบันทึกข้อมูลลงฐานข้อมูลไว้ ให้เขียนคำสั่งในส่วนนี้ด้วยตัวเอง