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.
1 2 3 4 5 6 7 8 |
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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?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 ('".$file_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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?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).
1 2 3 4 5 6 7 |
<?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
1 |
<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
1 |
<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.
kenapa yak FILE TIDAK VALID MULU…
trus yang File Laporan Bulan Maret 2010 (klik untuk download) sama yang ini ditulis dimana??
makasih tutorialnya om..
lg belajar php mysql…
haha
thanks atas ilmunya….
sip brow..sukses..:-D
@renita, untuk menampilkan link nya, sesuaikan dengan kebutuhan Anda, jika ingin ditampilkan dihalaman laporan misalnya, dan file laporan nya misalnya menggunakan laporan.php, maka tulis script tadi untuk menampilkan URL download laporan tersebut.
@m-iccank, @Eko Setiawan dan @imam, sama2 bro… semoga bermanfaat.
mau tanya donk,,,,,
yang maksudnya file system apa ya ???
masi belajar php nih…….
@TaeGang Unite, maksudnya file bukan tersimpan dalam database, melainkan tersimpan dalam harddisk/folder yang biasa kita lihat melalui file manager/explorer atau lewat FTP.
ohh gitu ??
caranya gimana supaya file upload nya tersimpan di folder ???
Cara simple nya bisa coba, bikin 1 folder namakan dengan upload, lalu bikin 1 file, namakan dengan upload.html, isinya berikut:
Lalu bikin satu file namakan dengan upload_file.php, isinya berikut:
Sumber: http://www.w3schools.com/php/php_file_upload.asp
Cocokan dengan sesuai kebutuhan nya.
mas aku kemarinkan uda nyobak apload file word ternyata bisa masuk ke database tapi kenapa kok ketika aku download file wordnya kok g’ ada isinya
bagaimana cara ngupload suara jika menggunakan blob,??? apa bisa,??
type field / kolom jenis BLOB adalah untuk file, artinya apapun itu isi nya, asalkan berbentuk file, bisa. Termasuk suara, video, zip, dan semua file lain nya.
Terima kasih source codenya
cara untuk nampilin dan editnya bagaimana pak,
Kalau edit tinggal ubah seperti pada field/kolom lainnya, yaitu seperti insert, bedanya pakai UPDATE, gt gan.
pesan errornya : Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\xampp\htdocs\gambar-blob\upload.php on line 15
mohon arahannya gan..
Silahkan dicoba code bagian yang mysqli_real_escae_string nya diberi opsi tampil error agar kita bisa melacak bagian mana error nya.