Untuk mengelola database yang berkaitan dengan gambar, sebagian besar programmer pasti menyimpan path dari gambar tersebut dalam table di database. Dengan kata lain, kita menyimpan gambar tersebut di tempat lain di server. Bagaimana kalau ternyata gambarnya tiba-tiba dihapus kemudian kita tidak melakukan update terhadap data tersebut di database. Maka dipastikan akan menjadi path yang tersimpan di table tidak akan ditemukan dan memunculkan broken image.
Jika Anda khawatir tentang kapasitas server dan perlu mengosongkan kapasitas di server Anda, Anda dapat memasukkan file gambar dalam database tanpa mengunggahnya ke dalam direktori. Langkah ini membantu untuk mengoptimalkan kapasitas server karena konten file gambar disimpan dalam database.
BLOB
MySQL memiliki tipe data BLOB (binary larger object) yang dapat menampung data biner dalam jumlah besar. Tipe data BLOB sangat cocok untuk menyimpan data gambar. Di MySQL, empat tipe BLOB tersedia – TINYBLOB, BLOB, MEDIUMBLOB, dan LONGBLOB.
Tipe Data BLOB | Kapasitas Maximum (dalam bytes) |
TINYBLOB | ((2^8)-1) |
BLOB | ((2^16)-1) |
MEDIUMBLOB | ((2^24)-1) |
LONGBLOB | ((2^32)-1) |
Untuk menyimpan data gambar, sebuah table perlu dibuat dalam database. Seperti pada tutorial sebelumnya menggunakan database db_belajar. Buat table tb_images :
1 2 3 4 5 6 |
CREATE TABLE `tb_images` ( `id` int(3) NOT NULL AUTO_INCREMENT, `tipeimage` varchar(20) NOT NULL DEFAULT '', `dataimage` blob NOT NULL, PRIMARY KEY id ) |
Buat halaman untuk proses upload gambar (index.php) :
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 30 31 32 33 34 35 36 37 38 |
<?php if (count($_FILES) > 0) { if (is_uploaded_file($_FILES['gambar']['tmp_name'])) { $koneksi = mysqli_connect("localhost", "root", "", "db_belajar"); $datagambar = addslashes(file_get_contents($_FILES['gambar']['tmp_name'])); $propertiesgambar = getimageSize($_FILES['gambar']['tmp_name']); $sql = "INSERT INTO tb_images(tipeimage ,dataimage) VALUES('" . $propertiesgambar['mime'] . "', '" . $datagambar . "')"; mysqli_query($koneksi, $sql) or die("<b>Error:</b> Ada kesalahan<br/>" . mysqli_error($koneksi)); $lastrecord = "SELECT id FROM tb_images ORDER BY id DESC LIMIT 1"; $result = mysqli_query($koneksi, $lastrecord) or die("<b>Error:</b> Ada kesalahan<br/>" . mysqli_error($koneksi)); $getid = mysqli_fetch_array($result); if (isset($getid["id"])) { $notif = 'Gambar berhasil di simpan, silakan lihat di <a target="_blank" href="view.php?id=' . $getid["id"] . '">sini</a>'; } } } ?> <html> <head> <title>Menyimpan Gambar Di MySQL</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <?php if (isset($notif)) { echo $notif; } ?> <form name="formupload" enctype="multipart/form-data" action="" method="post"> <label>Upload Gambar:</label><br /> <input name="gambar" type="file" /> <input type="submit" value="Submit" /> </form> </body> </html> |
Kemudian buat halaman untuk menampilkan gambar langsung dari database :
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $koneksi = mysqli_connect("localhost", "root", "", "db_belajar"); if (isset($_GET['id'])) { $sql = "SELECT * FROM tb_images WHERE id=" . $_GET['id']; $result = mysqli_query($koneksi, $sql) or die("<b>Error:</b> Ada kesalahan<br/>" . mysqli_error($koneksi)); $row = mysqli_fetch_array($result); header("Content-type: " . $row["tipeimage"]); echo $row["dataimage"]; } mysqli_close($koneksi); ?> |
Tentunya tutorial di atas masih sangan sederhana, kita bisa menambahkan fungsi untuk melakukan resize gambar jika ukuran gambar cukup besar. Seperti pada tutorial di Cara Mudah Untuk Upload Dan Resize Gambar Dengan PHP.
Tipe data yang digunakan di atas adalah BLOB, jika ukuran gambar yang diupload cukup besar dan ternyata tipe data tersebut tidak bisa meng-handle. Anda bisa merubahnya menjadi MEDIUMBLOB atau LONGBLOB. Jika Anda menyimpan gambar di database, maka ukuran database akan besar pula. Gambar yang Anda simpan dalam database, ukurannya sama dengan gambar yang tersimpan dalam direktori.

Terima kasih.
Websitenya bagus bang, kalo boleh tau tampilannya pake apa nih? bootstrap kah? krn saya cuma bisa bootstrap hh
kebetulan untuk blog ini pake wordpress bang, jadi tinggal nyari theme aja hehehe
kalau di gambar yang baru di upload itu di kasih link (href) ke url yang diinginkan gimana ya bang soslusi nya?
kayak misal di website di bukalapak gitu kan ketika kita menambahkan produk baru gambarnya langsung muncul di list.
dan ketika gambarnya di klik, otommatis menuju ke link deskripsi gambar kita
pakai AJAX, konsepnya sama dengan yang di sini : https://www.yudana.id/membuat-aplikasi-crud-sederhana-ajax-jquery-php-mysql/
kok hanya muncul hitam pas mau menampilkan gambarnya
ada pesan error nya muncul? bisa di cek dulu header filenya?
Bang makasih tutuorialnya, udah bisa.
bang ada tutorial menampilkan gambar dari database ke localhost
maksudnya? tinggal pakai tag img aja kan
kak mau nanya dong gmn ya caranya untuk menyimpan foto yg telah diinput dr user lalu disimpan ke databse?
tutorial di atas kan udah bisa upload kemudian nyimpan foto di database
Keren bang