การบันทึกรูปภาพลงฐานข้อมูล

การเก็บรูปภาพลงบน MySQL ก็ไม่ได้ยุ่งยากอะไรครับ อย่างแรกก็สร้างฟิลด์ picture เป็นชนิด Blob ก่อนเลย และอีกฟิลด์ชื่อ pic_type, pic_name เป็น varchar ครับ ฟิลด์ picture เราจะเอาไว้เก็บข้อมูลรูปภาพ ส่วนฟิลด์ pic_type เราจะเอาไว้เก็บ Header ของรูปเพื่อการแสดงผลครับ และฟิลด์ pic_name จะเก็บชื่อรูปครับ
การเก็บรูปภาพลงบนฐานข้อมูล ขั้นตอนแรก อ่านไฟล์รูปออกมาก่อนครับ

// มาจากการ Upload
$fileupload = $_FILES["fileupload"];
// เปิดไฟล์เพื่ออ่าน (binary)
$handle = fopen($fileupload[tmp_name], "rb");
// อ่านไฟล์
$imgdata = fread($handle, filesize($fileupload[tmp_name]));
$imgdata = addslashes($imgdata);
// เปิดแล้วปิดไฟล์ด้วย
fclose($handle);

แล้วก็บันทึกลงบนฐานข้อมูล ด้วย query นี้ (สามารถมีรายการอื่นเพิ่มเติมได้)
$sql="INSERT INTO `tablename` ( `picture` , `pic_type` , `pic_name` ) VALUES ( `$imgdata`, `$fileupload[type]`, `$fileupload[name]` );";

เพียงแค่นี้ รูปก็ลงไปอยู่ยังฐานข้อมูลแล้วครับ

สำหรับขั้นตอนในการอ่าน เราต้องกำหนด Header ให้กับการอ่านครับ เพื่อให้สามารถแสดงรูปภาพได้อย่างถูกต้อง สมมุติว่าเรา query ออกมาจากฐานข้อมูลแล้วนะครับ
// กำหนด Header เพื่อบอกว่าเป็นรูปชนิดใด
header("Content-type: $result['pic_type']");
// แสดงรูปภาพ
print $result['picture'];

ถ้ารูปภามมีขนาดใหญ่ ควรใช้ ฟิลด์ชนิด LongBlob หรือ MediumBlob แทน Blob นะครับ เนื่องจากมันจะสามารถเก็บข้อมูลได้ขนาดใหญ่กว่า

คำเตือน การจัดเก็บรูปภาพลงฐานข้อมูลไม่ใช่วิธีที่ดี เนื่องจากจะทำให้ฐานข้อมูลมีขนาดใหญ่เกินความจำเป็น ตลอดจนการนำมาแสดงผลก็ยังซับซ้อนเกินความจำเป็นอีกด้วย

วิธีปฏิบัติในการจัดเก็บรูปภาพที่ดีคือการเก็บรูปภาพเป็นไฟล์ และจัดเก็บ Path หรือชื่อของไฟล์บน Server รวมถึงจัดเก็บข้อมูลอื่นๆของรุปภาพ (ถ้ามี)  ลงฐานข้อมูล  (สามารถใช้วิธีนี้กับไฟล์ได้ทุกประเภท) เนื่องจากการจัดเก็บเป็นไฟล์ จะมีประสิทธิภาพดีกว่าบน Server

ผู้เขียน goragod โพสต์เมื่อ 01 เม.ย. 2551 เปิดดู 22,710 ป้ายกำกับ PHPSQL
^