การบันทึกรูปภาพลงฐานข้อมูล
การเก็บรูปภาพลงบน MySQL ก็ไม่ได้ยุ่งยากอะไรครับ อย่างแรกก็สร้างฟิลด์ picture เป็นชนิด Blob ก่อนเลย และอีกฟิลด์ชื่อ pic_type, pic_name เป็น varchar ครับ ฟิลด์ picture เราจะเอาไว้เก็บข้อมูลรูปภาพ ส่วนฟิลด์ pic_type เราจะเอาไว้เก็บ Header ของรูปเพื่อการแสดงผลครับ และฟิลด์ pic_name จะเก็บชื่อรูปครับ
การเก็บรูปภาพลงบนฐานข้อมูล ขั้นตอนแรก อ่านไฟล์รูปออกมาก่อนครับ
$fileupload = $_FILES["fileupload"];
// เปิดไฟล์เพื่ออ่าน (binary)
$handle = fopen($fileupload[tmp_name], "rb");
// อ่านไฟล์
$imgdata = fread($handle, filesize($fileupload[tmp_name]));
$imgdata = addslashes($imgdata);
// เปิดแล้วปิดไฟล์ด้วย
fclose($handle);
แล้วก็บันทึกลงบนฐานข้อมูล ด้วย query นี้ (สามารถมีรายการอื่นเพิ่มเติมได้)
เพียงแค่นี้ รูปก็ลงไปอยู่ยังฐานข้อมูลแล้วครับ
สำหรับขั้นตอนในการอ่าน เราต้องกำหนด Header ให้กับการอ่านครับ เพื่อให้สามารถแสดงรูปภาพได้อย่างถูกต้อง สมมุติว่าเรา query ออกมาจากฐานข้อมูลแล้วนะครับ
header("Content-type: $result['pic_type']");
// แสดงรูปภาพ
print $result['picture'];
ถ้ารูปภามมีขนาดใหญ่ ควรใช้ ฟิลด์ชนิด LongBlob หรือ MediumBlob แทน Blob นะครับ เนื่องจากมันจะสามารถเก็บข้อมูลได้ขนาดใหญ่กว่า
คำเตือน การจัดเก็บรูปภาพลงฐานข้อมูลไม่ใช่วิธีที่ดี เนื่องจากจะทำให้ฐานข้อมูลมีขนาดใหญ่เกินความจำเป็น ตลอดจนการนำมาแสดงผลก็ยังซับซ้อนเกินความจำเป็นอีกด้วย
วิธีปฏิบัติในการจัดเก็บรูปภาพที่ดีคือการเก็บรูปภาพเป็นไฟล์ และจัดเก็บ Path หรือชื่อของไฟล์บน Server รวมถึงจัดเก็บข้อมูลอื่นๆของรุปภาพ (ถ้ามี) ลงฐานข้อมูล (สามารถใช้วิธีนี้กับไฟล์ได้ทุกประเภท) เนื่องจากการจัดเก็บเป็นไฟล์ จะมีประสิทธิภาพดีกว่าบน Server