Menyiapkan Basis Data (MySQL Database)

MySQL merupakan basis data yang bersifat relasional dan juga salah satu basis data yang cukup banyak digunakan. Dan pada web sederhana ini kita juga akan menggunakan MySQL.

Yang akan menjadi pertanyaan adalah, untuk apa kita membutuhkan basis data MySQL pada web sederhana kita ini? Sebelumnya, tumpukan data daftar gambar yang kita buat masih berada dalam kode PHP kita. Bayangkan jika suatu saat kita membutuhkan untuk merubah atau bahkan menambah daftar gambar tersebut? Bukannya melakukan hal tersebut secara berulang-ulang akan terasa menyakitkan?

Lalu, apakah hanya untuk itu saja? Oh tidak, alasan lainnya adalah untuk belajar bagaimana sih menggunakan MySQL itu. Konsep dasar penggunaannya yang akan kita pelajari pada bagian ini. Menurut anda bagaimana seseorang yang membuat sebuah blog? Media Sosial? Apakah tumpukan data-data mereka yang sifatnya dinamis (berubah-ubah) ditanamkan langsung ke kode mereka masing-masing? Apakah anda menggunakan Facebook, Twitter, ataupun yang lain setiap kali menambahkan data anda harus menulis kode? Disitulah Basis Data memiliki peran penting.

Sebelum terlalu jauh pastikan kembali MySQL-Server atau MariaDB-Server telah terpasang di mesin anda. Dan juga pastikan anda memiliki akses untuk menggunakannya. Disini saya akan berasumsi bahwa user yang akan pertama kali digunakan adalah root.

  • Mengakses shell dari MySQL dengan user root, localhost merupakan host dari MySQL-Server terpasang dan berjalan. Jika sebelumnya anda telah memasang sebuah kata sandi, maka hal tersebut akan dibutuhkan untuk dapat mengakses shell dari MySQL.

    $ mysql -u root -p
    
  • Membuat sebuah basis data (database) dengan nama web_sederhana

    mysql> CREATE DATABASE web_sederhana;
    

    Jika berhasil, maka akan terdapat output kurang lebih seperti berikut:

    Query OK, 1 row affected (0.03 sec)
    
  • Membuat pengguna baru dengan nama user_web dan kata sandi 74ee55083a714aa3791f8d594fea00c9 (sangat disarankan untuk membuat satu pengguna baru, karena menggunakan akun root sangatlah tidak bijak dengan alasan keamanan. Serta sangat disarankan untuk menggunakan kata sandi yang aman). Setelah itu kita memberikan akses dari pengguna user_web ke database yang sebelumnya kita buat web_sederhana

    mysql> CREATE USER 'user_web'@'localhost' IDENTIFIED BY '74ee55083a714aa3791f8d594fea00c9';
    mysql> GRANT ALL PRIVILEGES ON `web_sederhana` . * TO 'user_web'@'localhost';
    mysql> FLUSH PRIVILEGES;
    mysql> EXIT;
    

    Sebelum melanjutkan, mari kita cek apakah semuanya telah siap. Kita akan mencoba untuk mengakses shell dari MySQL dengan menggunakan pengguna yang baru saja kita buat, dan membuka akses ke basis data yang juga baru saja kita buat.

    $ mysql -u user_web -p
    
    mysql> USE `web_sederhana`;
    

    Jika berhasil, maka pada bagian akhir akan memperlihatkan keluaran Database changed yang dimana mengartikan bahwa kita telah dapat membuka akses ke basis data yang baru saja kita buat dengan pengguna yang juta baru dibuat. Namun, jika terdapat masalah sampai sejauh ini silahkan gunakan kolom komentar.

    Seperti yang sebelumnya saya sampaikan, kita akan menyimpan tumpukan data daftar gambar ke dalam basis data. Dan yang untuk sementara kita butuhkan hanyalah alamat dari gambar tersebut, maka skema yang kita akan buat dan kita butuhkan pun untuk saat ini sangat-sangat sederhana.

    Kita akan membuat satu table (koleksi data) di MySQL dengan bernama daftar_gambar. Perlu diketahui, satu basis data dapat menyimpan banyak sekali table dan dalam satu table tentu saja memiliki kolom dan baris, atau dapat menyimpan banyak rekaman data (records / row).

    Namun hal yang kedepannya perlu diperhatikan adalah, membuat skema koleksi data dengan baik itu sangatlah penting. Karena akan sangat bijak jika data-data yang terekam akan mudah kita gunakan kembali (baca, atau ubah).

    Mari kita buat schemanya terlebih dahulu:

    mysql> CREATE TABLE `daftar_gambar` (
        -> `id` INT NOT NULL AUTO_INCREMENT,
        -> `alamat_gambar` VARCHAR(120) NOT NULL,
        -> PRIMARY KEY(`id`));
    

    Diatas, kita membuat tabel daftar_gambar dengan kolom id dan alamat_gambar. Dimana id memiliki tipe data integer dan tidak boleh memiliki nilai NULL disetiap rekaman data dan juga bersifat auto increment yang berarti pada saat id tidak kita berikan nilai pada saat memasukkan data baru ia akan terisi dengan sendirinya sesuai dengan urutan id yang sebelumnya pernah ada. (Dimulai dari 0 yah **pertamina)

    Dan kemudian, alamat_gambar kita beri tipe data varchar dengan ukuran 120. Silahkan buka Tipe Data MySQL untuk penjelasan lebih lengkap. Tipe data kita definisikan menyesuaikan dengan data apa yang akan kita rekam. Dari contoh diatas, alamat gambar hanya akan berisikan teks dari alamat gambar-gambar yang sebelumnya kita masukkan ke satu tumpukan data di gallery.php (boleh ditambah, diubah)

    Dan terakhir, PRIMARY KEY menandakan sebuah nilai unik yang digunakan untuk mengidentifikasikan setiap data yang berhasil terekam. Dalam hal ini kita menggunakan id, dimana id ini akan bernilai 1,2,3,4… dan seterusnya.

    Apa yang akan kita lakukan selanjutnya? Apakah kita telah bisa melanjutkan kode kita di PHP? Belum, mari kita mencoba membaca data dari table yang diatas telah kita buat dengan menggunakan query language yang telah disediakan MySQL tentunya.

    mysql> SELECT * from `daftar_gambar`;
    

    Maka tentu saja keluaran dari perintah diatas adalah Empty set (x.xx sec) yang dikarenakan table daftar_gambar belum memiliki rekaman data sama sekali. Karena diatas, kita hanya membuat tablenya saja. Mari kita coba menambahkan satu atau lebih rekaman data. Lalu kita baca kembali

    mysql> INSERT INTO `daftar_gambar` (`alamat_gambar`) VALUES
        -> ('http://blacktie.co/demo/stanley/assets/img/portfolio/port01.jpg');
    mysql> INSERT INTO `daftar_gambar` (`alamat_gambar`) VALUES
        -> ('http://blacktie.co/demo/stanley/assets/img/portfolio/port02.jpg'),
        -> ('http://blacktie.co/demo/stanley/assets/img/portfolio/port03.jpg');
    mysql> SELECT * from `daftar_gambar`;
    +----+-----------------------------------------------------------------+
    | id | alamat_gambar                                                   |
    +----+-----------------------------------------------------------------+
    |  1 | http://blacktie.co/demo/stanley/assets/img/portfolio/port01.jpg |
    |  2 | http://blacktie.co/demo/stanley/assets/img/portfolio/port02.jpg |
    |  3 | http://blacktie.co/demo/stanley/assets/img/portfolio/port03.jpg |
    +----+-----------------------------------------------------------------+
    3 rows in set (0.01 sec)
    

    Setelah kita menambahkan tiga data selesai, dan saat membaca kembali rekaman data yang telah kita masukkan maka hasilnya kurang lebih seperti diatas. Jika semua berjalan dengan, silahkan masukkan kembali gambar-gambar lainnya yang belum dimasukkan (boleh ditambah sesuai keinginan)

    Apa saja sih yang sebenarnya bisa kita lakukan dengan basis data beserta table yang telah kita buat ini? Ada banyak, bahkan sangat banyak. Dan karena alasan itu pula tidak dapat dijabarkan secara keseluruhan pada artikel ini. Namun, jika anda ingin mencari tahu lebih atau bahkan mendalami dari dasar-dasar basis data ini. Link berikut akan sangat membantu anda untuk memahami dan mempelajari hal-hal tersebut.

Mengakses Basis Data MySQL dari PHP

Ada beberapa cara atau metode yang dapat digunakan untuk mengakses Basis Data MySQL dari PHP. Menggunakan mysql_* atau mysqli_* atau PDO_MYSQL. Dan kali ini kita akan menggunakan PDO_MYSQL (PHP Data Objects).

Kenapa harus menggunakan PDO_MYSQL? Alasannya cukup mudah, PDO bisa dikatakan lebih aman dan lebih baik untuk digunakan ketimbang kedua metode lain yang saya sebutkan diatas. Aman yang saya maksudkan adalah dikarenakan mysql sendiri sudah tidak disarankan untuk digunakan dari pihak pengembang PHP itu sendiri. Kemudian, PDO sendiri memiliki dukungan yang lebih baik. Misalnya, PDO memiliki dukungan untuk prepare statement, store procedures transaction dan beberapa hal lainnya (tolong dikoreksi jika salah).

Selain itu, buat saya (sebelum menggunakan ORM-Object Relational Mapping) PDO lebih nyaman digunakan karena memiliki fitur untuk mengembalikan nilai Exception (throw exception) disaat query yang dijalankan bermasalah.

  • Membuat file konfigurasi untuk MySQL dan memberikan hak akses pada file tersebut

    $ touch inc/config.php
    $ chmod 644 inc/config.php
    

    Kita isi dengan informasi host, pengguna, kata sandi dan basis data yang telah kita buat. (Perlu diketahui, hal ini bukanlah satu-satunya cara untuk melakukan ini. Anda akan menemukan banyak sekali cara/metode untuk mendefinisikan hal ini)

    <?php
        define('DB_HOST', 'localhost');
        define('DB_USER', 'user_web');
        define('DB_PASSWORD', '74ee55083a714aa3791f8d594fea00c9');
        define('DB_NAME', 'web_sederhana');
    ?>
    
  • Membuat file untuk menghubungkan ke MySQL

    $ touch inc/db.php
    
    <?php
        include_once __DIR__ . '/config.php';
        $db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASSWORD);
    ?>
    

    Pada bagian ini, kita memanggil file config.php agar konstan yang telah kita definisikan bisa kita gunakan pada file ini. Lalu kita membuat sebuah koneksi ke MySQL menggunakan PDO yang berisikan informasi-informasi yang sebelumnya telah kita definisikan. Dan kemudian kita assign ke $db sebagai reference.

  • Mari kita uji coba dan menambahkan koneksi diatas ke dalam gallery.php, serta membaca kembali rekaman data dari daftar_gambar

    <?php
        include_once __DIR__.'/inc/Twig/lib/Twig/Autoloader.php';
        // memanggil file untuk menghubungkan ke MySQL
        include_once __DIR__.'/inc/db.php';
        Twig_Autoloader::register();
        $loader = new Twig_Loader_Filesystem(__DIR__ . '/template');
        $twig = new Twig_Environment($loader, array());
    
        $data = array(
            'judul' => 'Web Sederhana',
            'deskripsi' => 'Belajar membuat web sederhana',
            'daftar_gambar' => []
        );
        // membaca kembali rekaman data dari daftar_gambar
        $daftar_gambar = $db->query('SELECT * FROM `daftar_gambar`');
        // memastikan bahwa $daftar_gambar memiliki nilai sebelum kita lakukan perulangan
        if ($daftar_gambar) {
            // $daftar_gambar merupakan sebuah tumpukan data, dan dapat kita lakukan perulangan
            foreach ($daftar_gambar as $gambar) {
                // menambahkan setiap alamat_gambar dari hasil perulangan
                // kedalam tumpukan data $data['daftar_gambar']
                array_push($data['daftar_gambar'], $gambar['alamat_gambar']);
            }
        }
        echo $twig->render('gallery.html', $data);
    ?>
    

Nah, mari kita coba kembali menjalankan web sederhana kita ini menggunakan PHP Builtin Web Server dan mengakses halaman gallery.php

Bagaimana? Apakah sesuai? Jika semua berjalan dengan baik, maka gambar-gambar yang dimunculkan akan sesuai dengan jumlah rekaman data yang telah kita masukkan ke basis data yang kita buat. Jika ingin lebih, hal yang perlu dilakukan adalah menambahkan rekaman data pada table daftar_gambar.

Jika terjadi kesalahan, maka silahkan tuliskan di komentar. Kami akan senang hati untuk membantu anda.

Tulisan ini menutup Topik tentang “Membuat Web Sederhana menggunakan PHP, Twig Template Engine dan MySQL”. Kritik, ataupun saran adalah hal yang sangat kami butuhkan agar topik ini bisa kami ubah jika memang ada kekurangan. Dan juga sebagai pembelajaran untuk penulisan topik-topik berikutnya.

Membuat Web Sederhana menggunakan PHP, Twig Template Engine dan MySQL: Part 1

Membuat Web Sederhana menggunakan PHP, Twig Template Engine dan MySQL: Part 2

Membuat Web Sederhana menggunakan PHP, Twig Template Engine dan MySQL: Part 3

Membuat Web Sederhana menggunakan PHP, Twig Template Engine dan MySQL: Part 4

Happy Hacking