PHP insert/update/view file BLOB di MySQL
Cara untuk insert/update/view (menyimpan/mengubah/menampilkan) file biner pada MySQL adalah sebagai berikut.
Struktur database MySQL contoh nya kita beri nama tabel “file_attachment”, sebagai berikut:
Copy paste pada tools MySQL Administrasi Anda, seperti phpmyadmin.
CREATE TABLE IF NOT EXISTS `file_attachment` ( `id` bigint(20) NOT NULL auto_increment, `file_content` mediumblob NOT NULL, `file_name` varchar(255) NOT NULL, `file_type` varchar(255) NOT NULL, `file_size` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Untuk Insert Script nya adalah sbb.:
Beri nama file insert_blob.php (hanya contoh).
<?php // CONECT DATABASE @mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE"); @mysql_select_db("nama_database") OR die ("CONNECTED, BUT NO DATABASE"); if($_POST[submit]){ $file_name = $_FILES['file']['name']; $tmp_name = $_FILES['file']['tmp_name']; $file_size = $_FILES['file']['size']; $file_type = $_FILES['file']['type']; $fp = fopen($tmp_name, 'r'); $file_content = fread($fp, $file_size) or die("Error: cannot read file"); $file_content = mysql_real_escape_string($file_content) or die("Error: cannot read file"); fclose($fp); // INSERT $qu = "INSERT INTO `file_attachment` (`file_content`,`file_name`,`file_type`,`file_size`) VALUES ('".$content."','".$file_name."','".$file_type."','".$file_size."')"; $re = mysql_query($qu) or die ("Sorry Cant insert db!"); echo $file_name." inserted succesfully to database"; } echo '<form method="post" enctype="multipart/form-data">'; echo ' <input name="file" type="file">'; echo ' <input name="submit" type="submit" value="Upload">'; echo '</form>'; ?>
Untuk menampilkan File dari BLOB, menggunakan 2 file, file pertama adalah sebagai berikut:
Beri nama file view_blob.php (hanya contoh).
<?php // CONECT DATABASE @mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE"); @mysql_select_db("nama_database") OR die ("CONNECTED, BUT NO DATABASE"); $id = $_REQUEST['id']; $query = "SELECT * FROM `file_attachment` WHERE `id`='".$id."' LIMIT 1"; $qu = mysql_query($query); $num = mysql_numrows($qu); if($num > 0) { $result=mysql_fetch_object($qu); header("Content-Disposition: attachment; filename=".jin_gfile($result->file_name."")); header("Content-length: ".$result->file_size.""); header("Content-type: ".$result->file_type.""); echo $result->file_content; } else { echo "File tidak valid!"; } ?>
berikut tambahan fungsi jin_gfile, supaya nama file tidak ada karakter aneh (boleh disatukan dalam file view_blob.php).
<?php // CLEAN FILENAME function jin_gfile($txt) { $txt = preg_replace("/[^a-zA-Z0-9s.]/", "_", trim($txt)); return $txt; } ?>
Berikutnya file kedua untuk view, adalah sbb bergantung kebutuhan:
- Untuk File Download (file umum), kita asumsikan pada data di MySQL sudah ada id 9 yang isinya adalah file document laporan ber ekstensi .doc atau .xls
<a href="http://namadomain/view_blob.php?id=9">File Laporan Bulan Maret 2010 (klik untuk download)</a>
- Untuk menampilkan gambar, kita asumsikan pada data di MySQL sudah ada id 3 yang isinya adalah file gambar ber ekstensi .jpg, .gif atau .png
<img src="http://namadomain/view_blob.php?id=3" alt="Gambar Alumni 1996">
Catatan PENTING: jika memungkinkan disarankan untuk tidak memilih menyimpan file biner kedalam struktur storage tabel database MySQL, melainkan lebih baik menyimpan file system.

