Cara menggunakan mysql blob
Tadi nya sistem loading tipe field gambar dari database mysql itu saya stream dulu ke file baru di load ke vb.net, cuma cara ini sering jadi error, file terkunci saat file temporary hendak di tulis ulang.
Trik tersebut saya ikuti dari situs mysql lupa link yang mana, entah kenapa saya muter muter nyari solusi kok ga ada yang menjelaskan secara sederhana cara loading ini, untungnya ada yang mau menjelaskan di situs stackoverflow tapi tetep saja caranya muter dan ribet berikut cara saya yang simpel untuk saving gambar dan loading lagi Secara singkat, saya punya tabel "tuser" dengan kolom nama dan foto, tipe nama itu varchar, dan foto adalah mediumblob, untuk bisa jalan set dulu conn dengan koneksi mysqlnya (mysqlconnection) dan "Imports MySql.Data.MySqlClient" di header file vb conn di set saat login dengan setting sebagai berikut :
Selanjutnya, untuk penyimpanan gambar ke blob, adalah
Dan untuk loading lagi nya
Silakan dibandingkan dengan yang stackoverflow, walaupun ide bukan dari saya, tapi sepertinya yang saya tulis lebih simple, dan mudah dipahami, semoga berguna... 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: 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.: 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 // 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 '; echo ' '; echo ' '; echo ''; ?> Untuk menampilkan File dari BLOB, menggunakan 2 file, file pertama adalah sebagai berikut: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // 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). PHP1 2 3 4 5 6 7 // 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: 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 PHP1 <img src="http://namadomain/view_blob.php?id=3" alt="Gambar Alumni 1996">
|