Monday, December 26, 2016

Bab 2. PHP/MySQL Untuk Programer


Menggunakan PHP dengan MySQL





Database merupakan kumpulan informasi yang besar. Dengan database, Anda dapat dengan mudah merekam dan kemudian mengakses sejumlah informasi untuk pelbagai kepentingan. Sembarang tipe data dapat disimpan dalam sebuah database. Database dapat menyimpan nama, alamat, rekaman medis, laporan polisi, transaksi penjualan, informasi seputar musik dan video, dan lainnya. Pada buku ini, Anda akan menciptakan sebuah situs web, dimana Anda akan menyimpan informasi yang berkaitan dengan film dalam sebuah database MySQL.

Struktur MySQL
Dalam sistem database tak-relasional, semua informasi disimpan pada satu bidang luas, yang kadangkala data di dalamnya sangat sulit dan melelahkan untuk diakses. Tetapi MySQL merupakan sebuah sistem database relasional, sehingga Anda dapat mengelompokkan informasi ke dalam tabel-tabel, atau grup-grup informasi yang berkaitan. Setiap tabel memuat bidang-bidang yang terpisah, yang merepresentasikan setiap bit informasi. Sebagai contoh, satu bidang dapat memuat nama depan konsumen, dan bidang lain memuat nama belakangnya. Bidang dapat memuat pelbagai tipe data, seperti teks, angka, tanggal, dan lainnya.

Jika Anda familiar dengan program spreadsheet seperti Microsoft Excel atau OpenOffice.org Calc, maka Anda tidak akan mengalami kesulitan dalam berpikir tentang tabel. Setiap spreadsheet berperan seperti tabel, dimana setiap baris memuat satu rekaman dan setiap kolom memuat bidang yang berbeda. Sama seperti spreadsheet workbook yang merupakan sekumpulan spreadsheet yang berelasi, database juga merupakan sekumpulan tabel yang berelasi.

Anda menciptakan tabel database berdasarkan tipe informasi yang ingin Anda simpan di dalamnya. Tabel-tabel yang terpisah pada MySQL kemudian dihubungkan menggunakan denominator bersama, dimana terdapat nilai-nilai yang sama pada bidang bersama.

Sebagai contoh, bayangkan sebuah tabel yang mencakup nama, alamat, dan nomor KTP seorang pelanggan, dan tabel lain yang memuat nomor KTP dan rekaman pesanan dari seorang pelanggan. Bidang bersama adalah nomor KTP pelanggan, dan informasi yang disimpan pada dua tabel yang terpisah akan dihubungkan melalui bidang-bidang dimana nomor KTP bernilai sama. Hal ini dapat Anda gunakan untuk melihat semua informasi yang berkaitan dengan pelanggan tertentu.

Tipe Bidang
Ketika Anda menciptakan sebuah tabel, Anda perlu memberitahu database MySQL tentang apa tipe informasi yang akan disimpan pada tiap bidang. Beberapa tipe bidang dan contohnya dicantumkan pada tabel berikut.

Tipe bidang MySQL
Penjelasan
Contoh
char(length)
Sembarang data berbasis karakter dapat disimpan pada bidang ini, tetapi bidang tersebut akan memiliki panjang yang dibatasi dengan nilai di dalam kurung.
Jenis kelamin konsumen selalu memiliki panjang satu karakter (L/P). Oleh karena itu, dapat digunakan char(1).
varchar(length)
Sembarang data berbasis karakter dapat ditempatkan pada bidang ini, dan data tersebut dapat memiliki panjang yang bervariasi dari 0 sampai 255 karakter. Panjang maksimum bidang diberikan pada nilai di dalam kurung.
Bidang alamat konsumen dapat memuat huruf dan angka dan memiliki panjang yang bervariasi.

int(length)
Integer yang memiliki rentang dari -2,147,483,648 sampai +2,147,483,647 dapat disimpan pada bidang ini. Parameter length membatasi jumlah dijit yang dapat ditampilkan, bukan nilainya. Fungsi matematik dapat diterapkan pada data dalam bidang ini.
Kuantitas sebuah produk dapat direpresentasikan oleh tipe bidang ini.

int(length) unsigned
Integer positif (dan nol) sampai dengan 4,294,967,295 dapat ditempatkan pada bidang ini. Parameter length membatasi jumlah dijit yang dapat ditampilkan, bukan nilainya. Fungsi matematik dapat diterapkan pada data dalam bidang ini.
ID konsumen (jika keseluruhannya berupa angka numerik).

text
Sembarang data berbasis karakter dapat ditempatkan pada bidang ini, dengan ukuran maksimum sebesar 65,536 karakter.
Bidang komentar yang memuat teks panjang dapat disimpan agar tidak dibatasi hanya sepanjang 255 karakter.
decimal(length,dec)
Bidang numerik yang dapat menyimpan nilai desimal. Parameter length membatasi jumlah dijit yang ditampilkan, dan parameter dec membatasi jumlah dijit di belakang titik desimal yang dapat disimpan.
Harga. Sebagai contoh, sebuah bidang harga yang akan menyimpan harga sampai 999.99 akan didefinisikan sebagai decimal(5,2).
enum( “ option1 ”,
“ option2 ” , ... )
Dipakai hanya untuk nilai-nilai tertentu, seperti “true” dan “false”.
Bidang jenis kelamin untuk pengguna seperti “laki-laki” atau “perempuan”.
date
Menyimpan sebuah tanggal dalam format YYYY-MM-DD.
Tanggal dimana pengguna bergabung pada situs tertentu.
time
Menyimpan waktu dalam format hh:mm:ss.

Waktu dimana sebuah artikel berita ditambahkan pada situs berita.
datetime
Bidang multiguna yang dapat menyimpan tanggal dan waktu secara bersamaan sebagai YYYY-MM-DD hh:mm:ss.
Tanggal dan waktu terakhir dimana seorang pengguna mengunjungi situs Anda.
year(length)
Menyimpan sebuah tahun. Secara default, tahun memuat empat dijit, meskipun adalah memungkinkan untuk menetapkan format dua-dijit dengan menggunakan parameter length.

tinyint(length)
Bidang numerik yang menyimpan integer dari -128 sampai 127. (Dengan menambahkan parameter unsigned, menyebabkan penyimpanan dari 0 sampai 255).

smallint(length)
Bidang numerik yang menyimpan integer dari -32768 sampai 32767. (Dengan menambahkan parameter unsigned, menyebabkan penyimpanan dari 0 sampai 65535).

mediumint(length)
Bidang numerik yang menyimpan integer dari -8,388,608 sampai 8,388,607. (Dengan menambahkan parameter unsigned, menyebabkan penyimpanan dari 0 sampai 16,777,215).

bigint(length)
Bidang numerik yang menyimpan integer dari -9,223,372,036,854,775,808 sampai 9,223,372,036,854,775,807. (Dengan menambahkan parameter unsigned, menyebabkan penyimpanan dari 0 sampai 18,446,744,073,709,551,615).

tinytext
Dapat menyimpan sampai dengan 255 karakter.

mediumtext
Dapat menyimpan sampai dengan 1,677,215 karakter.

longtext
Dapat menyimpan sampai dengan 4,294,967,295 karakter.

blob
Sama dengan bidang teks, kecuali bahwa bidang ini bersifat case-sensitive. Dapat menyimpan sampai dengan 65,535 karakter. Bidang blob dan derivatifnya (bidang-bidang berikutnya) umumnya digunakan untuk menyimpan data biner.

tinyblob
Sama dengan bidang tinytext, kecuali bahwa bidang ini bersifat case-sensitive ketika pengurutan dan pembandingan dilakukan.

mediumblob
Sama dengan bidang mediumtext, kecuali bahwa bidang ini bersifat case-sensitive ketika pengurutan dan pembandingan dilakukan.

longblob
Sama dengan bidang longtext, kecuali bahwa bidang ini bersifat case-sensitive ketika pengurutan dan pembandingan dilakukan.


null/not null
MySQL server Anda juga perlu mengetahui apakah suatu bidang dapat kosong atau tidak. Anda dapat menetapkannya dengan opsi null atau not null. Opsi null memberitahu MySQL bahwa adalah tidak masalah jika tidak ada yang disimpan pada bidang tertentu, dan opsi not null memberitahu MySQL untuk mensyaratkan sesuatu untuk disimpan pada bidang tertentu. Anda perlu hati-hati bahwa angka nol tidak sama dengan entri null.

Jika sebuah bidang yang didefinisikan dengan not null dan tidak ada yang dimasukkan oleh pengguna, maka MySQL akan mengisikan 0 pada bidang tersebut agar tidak menghasilkan error.

Indeks
MySQL menggunakan indeks untuk mempercepat proses pencarian terhadap baris informasi tertentu. Berikut bagaimana indeks dipakai: Bayangkan Anda sedang berada di dalam sebuah ruangan yang penuh dengan tumpukan nota dari semua barang yang pernah Anda beli seumur hidup Anda. Kemudian pada suatu saat, Anda harus mengembalikan celana yang pernah Anda beli pada tahun 1977, tetapi untuk melakukannya Anda memerlukan nota pembelian. Jadi, Anda akan mulai mencari nota tersebut pada tumpukan kertas yang ada. Lima hari kemudian, Anda menemukannya tetapi setelah Anda mengutuki diri Anda sendiri dan menyesali mengapa Anda tidak terbiasa mengorganisir atau mengelompokkan nota-nota tersebut minimal dalam grup per tahun. Dan kemudian, Anda mulai menata dan mengelompokkan nota-nota tersebut dalam beberapa kategori, seperti baju pada lemari 3, celana pada lemari 2, alat tulis pada lemari 4, dan seterusnya. Jadi, pada waktu yang akan datang, jika Anda ingin mengembalikan sesuatu yang pernah Anda beli beberapa tahun yang lalu, maka Anda dapat memeriksa lemari yang tepat karena telah tertata sesuai dengan kategori pembelian.

MySQL memerlukan sedikitnya satu indeks pada tiap tabel. Biasanya, Anda akan menggunakan suatu primary key atau pengenal unik untuk membantu penjejakan data. Bidang ini harus ditetapkan NOT NULL dan/atau UNIQUE; Contoh dari primary key adalah nomor ID konsumen untuk menjejak informasi tiap konsumen. Agar Anda dapat dengan mudah membedakan dua konsumen yang berbeda yang memiliki nama sama Rismon Sianipar, maka Anda perlu suatu mekanisme untuk membedakannya. Oleh karena itu, pada tabel nota, Anda perlu menciptakan sebuah primary key dan menugaskan primary key pada tiap nota.

Ketika parameter unique diaktifkan, MySQL akan memastikan bahwa tidak ada duplikasi pada bidang tertentu. Ini biasanya dipakai hanya untuk primary key pada tabel Anda, tetapi dapat pula dipakai pada bidang lainnya.
Tipe Tabel MySQL dan Mesin Penyimpanan (Storage Engine)
Selanjutnya, Anda perlu mengenal tipe-tipe tabel, yaitu transaction-safe tables (TST) dan non-transaction-safe tables (NTST). Tabel TST mengijinkan pengubahan data tabel yang telah dibuat. Tabel NTST merupakan tabel yang jauh lebih cepat tetapi pengubahan data tabel yang telah dibuat tidak bisa dilakukan.

MySQL memiliki beberapa mesin penyimpanan yang tersedia untuk menyimpan dan mengakses data, lima mesin penyimpanan yang umum digunakan adalah:
D        MyISAM
D        MERGE
D        MEMORY
D        InnoDB
D        BDB

MyISAM
Ini merupakan mesin penyimpanan default dan cukup untuk kebutuhan pengguna pada umumnya. Mesin ini mendukung semua tipe bidang, parameter, dan fungsi yang telah didiskusikan sejauh ini. Mesin ini menduku tabel NTST. Jika Anda merupakan pengguna MySQL yang berpengalaman, maka Anda pasti mengetahui bahwa mesin ini menggantikan mesin ISAM yang lebih lama.

MERGE
Mesin penyimpanan ini dapat memanipulasi beberapa tabel MyISAM yang identik sebagai satu entitas. Mesin ini mendukung tabel NTST.

MEMORY
Mesin penyimpanan ini umumnya dipakai untuk tabel temporer karena kecepatannya, tetapi ia tidak mendukung beberapa fitur dari tabel MyISAM, seperti kolom auto_increment dan blob/text.

InnoDB
Tipe mesin ini mendukung tabel TST. Mesin ini dikhususkan untuk aplikasi yang sangat besar dan memiliki laju pengaksesan tingkat tinggi.

BDB
BDB, atau BarkeleyDB, merupakan tipe mesin penyimpanan lain yang mendukung tabel TST. Mesin ini dikhususkan untuk aplikasi yang sangat besar dan memiliki laju pengaksesan tingkat tinggi, dimana ribuan pengguna dapat melakukan penyisipan dan pembaruan data pada saat bersamaan.

Sintaks dan Perintah MySQL
Meskipun adalah memungkinkan untuk mengakses MySQL secara langsung melalui command prompt, pada buku ini Anda akan mengaksesnya melalui PHP. Sintaks perintah MySQL sama tanpa memandang bagaimana mode MySQL server mengakses informasi.

Umumnya, Anda menggunakan perintah-perintah MySQL dengan semua huruf besar, tetapi hal ini tidak menjadi keharusan. Tujuan penggunaan huruf besar adalah agar dapat membantu membedakan sintaks MySQL dari variabel, data, atau nama database.

Perintah-perintah MySQL yang akan digunakan pada buku ini adalah:
D        CREAT      : Menciptakan database dan tabel baru.
D        ALTER      : Memodifikasi tabel yang sudah ada.
D        SELECT    : Memilih data yang diinginkan.
D        DELETE   : Menghapus data dari tabel.
D        DESCRIBE            : Menjeleskan struktur dan spesifikasi tabel.
D        INSERT INTO namatabel VALUES            : Menempatkan nilai-nilai ke dalam tabel.
D        UPDATE   : Memodifikasi data yang sudah ada pada suatu tabel.
D        DROP        : Menghapus tabel atau database secara menyeluruh.

Bagaimana PHP dan MySQL Berinteraksi
Sejak kelahiran PHP6, Anda memerlukan beberapa langkah ekstra agar PHP dan MySQL dapat berinteraksi satu sama lain. Sebelum fungsi MySQL dikenali, Anda perlu memastikan untuk mengaktifkan MySQL pada file php.ini.

Beberapa fungsi MySQL yang umum digunakan adalah:
D        mysql_connect([$host[, $username[, $password]]]) : Menghubungkan ke MySQL server dan menghasilkan sebuah resource yang dipakai untuk mereferensi koneksi.
D        mysql_select_db($database[, $resource]): Ekivalen dengan perintah USE untuk menetapkan database yang aktif.
D        mysql_query($query[, $resource]) : Digunakan untuk mengirimkan setiap perintah MySQL ke server database.
D        mysql_fetch_array($result): Menghasilkan suatu baris data dari hasil query yang ditetapkan sebagai suatu array.
D        mysql_error([$resource]):  Menampilkan pesan error yang dihasilkan oleh query sebelumnya.

Anda akan menjadi sangat familiar dengan perintah-perintah ini dengan seiring bertambahnya contoh pada buku ini.

Anda dapat mengirimkan sembarang perintah MySQL ke server melalui PHP, menggunakan perintah mysql_query, seperti diberikan pada contoh berikut. Anda melakukannya dengan mencantumkan teks pada PHP, baik melalui sebuah variabel atau melalui perintah mysql_query secara langsung, seperti ini:

$hasil = mysql_query(‘SELECT * FROM TABLE’);

Tetapi sebagian pengguna menganggapnya lebih baik bila dilakukan dalam dua langkah, seperti ini:

$query = ‘SELECT * FROM TABLE’;
$hasil = mysql_query($query);


Contoh
Menciptakan sebuah database
1.     Buka editor teks Anda, dan ketikkan kode berikut. Kode ini akan menciptakan database Anda dan beberapa tabel untuk menampung data.

<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');

//menciptakan database utama jika belum ada
$query = 'CREATE DATABASE IF NOT EXISTS situsfilm';
mysql_query($query, $db) or die(mysql_error($db));

//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

//menciptakan tabel film
$query = 'CREATE TABLE film (
         id_film INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
         nama_film VARCHAR(255) NOT NULL,
         tipe_film TINYINT NOT NULL DEFAULT 0,
         tahun_film SMALLINT UNSIGNED NOT NULL DEFAULT 0,
         aktor_film INTEGER UNSIGNED NOT NULL DEFAULT 0,
         sutradara_film INTEGER UNSIGNED NOT NULL DEFAULT 0,
           
        PRIMARY KEY (id_film),
        KEY tipe_film (tipe_film, tahun_film)
    )
    ENGINE=MyISAM';
mysql_query($query, $db) or die (mysql_error($db));

//menciptakan tabel tipefilm
$query = 'CREATE TABLE tipefilm (
         id_tipefilm TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
         label_tipefilm VARCHAR(100) NOT NULL,
         PRIMARY KEY (id_tipefilm)
    )
    ENGINE=MyISAM';
mysql_query($query, $db) or die(mysql_error($db));

//menciptakan tabel orang
$query = 'CREATE TABLE orang (
         id_orang INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
         namapenuh_orang VARCHAR(255) NOT NULL,
         aktor_orang TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
         sutradara_orang TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
         PRIMARY KEY (id_orang)
    )
    ENGINE=MyISAM';
mysql_query($query, $db) or die(mysql_error($db));

echo 'Database film sukses diciptakan!';
?>

2.    Simpan file ini dengan nama databasefilm.php.
3.    Ciptakan sebuah file baru dengan nama tabelfilm.php. Ini merupakan file untuk mengisi database.

<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');

//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

// menyisipkan data ke tabel film
$query = 'INSERT INTO film
       (id_film, nama_film, tipe_film, tahun_film, aktor_film, sutradara_film)
    VALUES
    (1, "Bruce Almighty", 5, 2003, 1, 2),
    (2, "Office Space", 5, 1999, 5, 6),
    (3, "Grand Canyon", 2, 1991, 4, 3)';
mysql_query($query, $db) or die(mysql_error($db));

// menyisipkan data ke tabel tipefilm
$query = 'INSERT INTO tipefilm
       (id_tipefilm, label_tipefilm)
    VALUES
    (1,"Sci Fi"),
    (2, "Drama"),
    (3, "Petualangan"),
    (4, "Perang"),
    (5, "Komedi"),
    (6, "Horror"),
    (7, "Aksi"),
    (8, "Anak")';
mysql_query($query, $db) or die(mysql_error($db));

// menyisipkan data ke dalam tabel orang
$query = 'INSERT INTO orang
      (id_orang, namapenuh_orang, aktor_orang, sutradara_orang)
    VALUES
    (1, "Jim Carrey", 1, 0),
    (2, "Tom Shadyac", 0, 1),
    (3, "Lawrence Kasdan", 0, 1),
    (4, "Kevin Kline", 1, 0),
    (5, "Ron Livingston", 1, 0),
    (6, "Mike Judge", 0, 1)';
mysql_query($query, $db) or die(mysql_error($db));

echo 'Data sukses disisipkan!';
?>

4.    Pertama-tama, jalankan file databasefilm.php dari jendela browser; kemudian, jalankan file tabelfilm.php.

Pertama, Anda menghubungkan ke server MySQL sehingga Anda dapat mengirimkan perintah-perintah MySQL dan bekerja dengan database dan tabel. Anda juga ingin diberitahu bila terdapat error, dan Anda menginginkan bahwa program Anda berhenti seketika saat error terjadi. Anda melakukannya pada beberapa baris pertama:

//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');

Kemudian Anda menciptakan database. Jika karena alasan tertentu database tidak dapat diciptakan, maka Anda perlu memberitahu server agar berhenti seketika dan menunjukkan pada Anda apa permasalahan yang terjadi:

//menciptakan database utama jika belum ada
$query = 'CREATE DATABASE IF NOT EXISTS situsfilm';
mysql_query($query, $db) or die(mysql_error($db));

Anda juga perlu memilih database Anda, sehingga server mengetahui database mana yang akan Anda kerjakan:

//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

Kemudian Anda mulai menciptakan tabel-tabel, dimulai dengan tabel film. Anda mendefinisikan nama-nama bidang dan menetapkan tiap parameternya dengan SQL berikut:

//menciptakan tabel film
$query = 'CREATE TABLE film (
         id_film INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
         nama_film VARCHAR(255) NOT NULL,
         tipe_film TINYINT NOT NULL DEFAULT 0,
         tahun_film SMALLINT UNSIGNED NOT NULL DEFAULT 0,
         aktor_film INTEGER UNSIGNED NOT NULL DEFAULT 0,
         sutradara_film INTEGER UNSIGNED NOT NULL DEFAULT 0,
               
        PRIMARY KEY (id_film),
        KEY tipe_film (tipe_film, tahun_film)
    )
    ENGINE=MyISAM';

Selanjutnya Anda perlu mengirimnya ke server dengan fungsi mysql_query(). Sekali lagi, Anda memberitahu server untuk menghentikan program dan memberitahu error yang terjadi (bila ada):

mysql_query($query, $db) or die (mysql_error($db));

Anda juga menciptakan tabel tipefilm dan tabel orang dengan cara yang sama. Anda perlu memastikan bahwa semuanya tidak ada masalah jika program Anda berjalan sampai ke akhir, jadi Anda perlu menampilkan sebuah statemen keberhasilan untuk memberitahu Anda:

echo 'Database film sukses diciptakan!';

Dengan file tabelfilm.php Anda, Anda mengisi tabel dengan informasi. Pertama, Anda melakukan koneksi ke server MySQL dan memilih database.

//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');

//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

Kemudian Anda menyisipkan data ke dalam tabel film. Anda terlebih dahulu mencantumkan kolom-kolom yang akan Anda akses, dan kemudian Anda mencantumkan nilai untuk tiap rekaman, seperti pada SQL berikut:

// menyisipkan data ke tabel film
$query = 'INSERT INTO film
       (id_film, nama_film, tipe_film, tahun_film, aktor_film, sutradara_film)
    VALUES
    (1, "Bruce Almighty", 5, 2003, 1, 2),
    (2, "Office Space", 5, 1999, 5, 6),
    (3, "Grand Canyon", 2, 1991, 4, 3)';

Anda melakukan hal yang sama untuk dua tabel lainnya, tabel tipefilm dan tabel orang.

Anda perlu memastikan bahwa semuanya tidak ada masalah jika program Anda berjalan sampai ke akhir, jadi Anda perlu menampilkan sebuah statemen keberhasilan untuk memberitahu Anda:

echo 'Data sukses disisipkan!';

Query pada Database
Karena Anda telah memiliki data pada database, Anda pasti ingin mengaksesnya. Anda bisa menggunakan statemen SELECT untuk memilih data yang sesuai dengan kriteria Anda.

Sintaks umum untuk perintah ini adalah sebagai berikut:

SELECT [nama-nama bidang]
AS [alias]
FROM [nama tabel]
WHERE [kriteria]
ORDER BY [nama bidang yang akan diurutkan] [ASC|DESC]
LIMIT [offset, jumlah baris maksimum]

Berikut merupakan parameter yang umum digunakan:
D        SELECT [nama-nama bidang]: Untuk memilih nama-nama bidang yang ingin Anda akses. Jika Anda ingin mengakses semuanya, Anda bisa menggunakan * menggantikan nama-nama bidang.
D        AS: Anda menggunakan nama-nama bidang alias sehingga Anda dapat mengaksesnya dengan nama-nama yang berbeda. Misalnya, SELECT nama_film, tahun_film AS tahun_rilis FROM film.
D        FROM: Anda perlu menyebutkan nama tabel yang sedang Anda akses.
D        WHERE: Mencantumkan kriteria untuk memfilter data.
D        ORDER BY: Menggunakan parameter ini jika Anda ingin mengurutkan data berdasarkan bidang tertentu. Data akan terurut secara menaik (default), meskipun Anda dapat secara eksplisit menetapkan ASC untuk urutan menaik atau DESC untuk urutan menurun.
D        LIMIT: Anda dapat menggunakannya untuk membatasi jumlah hasil yang diberikan dan menetapkan offset. Misalnya LIMIT 9, 10. Ini akan menampilkan rekaman 10 sampai 19 (10 + 9).



Klausa WHERE
Klausa WHERE sangat penting dalam query. Jika SELECT memberitahu MySQL bidang-bidang nama yang ingin Anda lihat, maka WHERE memberitahu MySQL rekaman-rekaman mana yang ingin Anda lihat.

// mengakses semua informasi tentang semua konsumen
SELECT * FROM konsumen;

// mengakses semua informasi tentang konsumen pria
SELECT * FROM konsumen WHERE gender = “Pria”

Operator perbandingan merupakan jantung dari klausa WHERE, mencakup:
D        = dipakai untuk menguji apakah dua nilai bernilai sama.
D        != dipakai untuk menguji apakah dua nilai bernilai tidak sama.
D        < dipakai untuk menguji apakah nilai pertama bernilai kurang dari nilai kedua.
D        <= dipakai untuk menguji apakah nilai pertama bernilai kurang dari atau sama dengan nilai kedua.
D        > dipakai untuk menguji apakah nilai pertama bernilai lebih dari nilai kedua.
D        >= dipakai untuk menguji apakah nilai pertama bernilai lebih dari atau sama dengan nilai kedua.
D        LIKE dipakai untuk membandingkan teks. Anda dapat menggunakan % dan _ sebagai wildcard. Wildcard digunakan untuk melakukan pencarian apabila Anda hanya mengetahui sepotong informasi. Sebagai contoh, SELECT * FROM produk WHERE deskripsi LIKE “%merah%”.  Klausa WHERE pada query ini akan mencocokkan sembarang rekaman yang memiliki pola teks “ merah “ dalam kolom deskripsi, seperti “baju merah”, “celana merah”, atau “merah jambu”.

Selain itu, operator logikal seperti AND, NOT, OR, dan XOR juga dapat dipakai dalam klausa WHERE. Sebagai contoh,  SELECT * FROM produk WHERE deskripsi LIKE “%merah%” AND harga <= 100000.

Contoh
Menggunakan query SELECT
1.     Buka editor teks Anda, dan ketikkan kode ini:

<?php
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

// memilih judul film dan genrenya setelah tahun 1990
$query = 'SELECT
        nama_film, tipe_film
    FROM
        film
    WHERE
        tahun_film > 1990
    ORDER BY
    tipe_film';
$hasil = mysql_query($query, $db) or die(mysql_error($db));

// menampilkan hasil
while ($baris = mysql_fetch_array($hasil)) {
    extract($baris);
    echo $nama_film . ' - ' . $tipe_film . '<br/>';
}
?>

2.    Simpan file tersebut dengan nama seleksi1.php, dan kemudian jalankan browser Anda.



Loop foreach
Loop foreach sama dengan loop while ketika Anda menggunakan while untuk mengakses setiap hasil dari query. Tujuan dari loop foreach adalah menerapkan sebuah blok statemen terhadap setiap baris pada hasil query. Berikut merupakan contoh dari penggunaan loop foreach:

foreach ($baris as $nilai) {
    echo $nilai;
    echo ‘<br>’;
}

Kode tersebut akan mengambil semua variabel dalam array $baris dan menampilkan setiap nilainya.

Contoh
Menggunakan loop foreach
1.     Dalam file seleksi1.php, buatlah beberapa perubahan, seperti ditampilkan pada baris-baris yang disoroti berikut:

<?php
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

// memilih judul film dan genrenya setelah tahun 1990
$query = 'SELECT
        nama_film, tipe_film
    FROM
        film
    WHERE
        tahun_film > 1990
    ORDER BY
    tipe_film';
$hasil = mysql_query($query, $db) or die(mysql_error($db));

// menampilkan hasil
while ($baris = mysql_fetch_assoc($hasil)) {
    foreach ($baris as $nilai) {
        echo $nilai . ' ';
    }
    echo '<br/>';
}
?>

Anda pasti melihat hasil yang sama seperti sebelumnya. Fungsi mysql_fetch_array sebenarnya menghasilkan dua array (satu merupakan array dengan indeks asosiatif, satu array lain dengan indeks numerik), jadi Anda akan melihat nilai-nilai duplikat jika Anda menggunakan foreach tanpa terlebih dahulu mengisolasi salah satu array. Anda dapat melakukannya dengan menggunakan mysql_fetch_array($hasil, MYSQL_ASSOC) atau   mysql_fetch_array($hasil). Anda masih perlu menggunakan fungsi while untuk menjelajah baris-baris terseleksi.

Contoh
Menggunakan loop foreach untuk menciptakan tabel
1.     Bukalah editor teks Anda, dan ketikkan skript berikut:

<?php
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

// memilih judul film dan genrenya setelah tahun 1990
$query = 'SELECT
        nama_film, tipe_film
    FROM
        film
    WHERE
        tahun_film > 1990
    ORDER BY
    tipe_film';
$hasil = mysql_query($query, $db) or die(mysql_error($db));

// menampilkan hasil
echo '<table border="1">';
while ($baris = mysql_fetch_assoc($hasil)) {
    echo '<tr>';
    foreach ($baris as $nilai) {
        echo '<td>' . $nilai . '</td>';
    }
    echo '</tr>';
}
echo '</table>';
?>

2.    Simpanlah file tersebut dengan nama seleksi2.php, dan kemudian buka dengan browser Anda. Anda akan melihat berikut:



Dua Tabel
Kode sebelumnya tampak rapi dan menarik, tetapi kode tersebut tidak menceritakan semua hal tentang tabel. Pada kasus ini, Anda akan membaca informasi dari lebih dari satu tabel, dengan dua cara:
D        Mereferensi tabel-tabel secara individual dalam query Anda dan menghubungkannya secara temporer melalui suatu bidang bersama.
D        Secara formal menggabungkan (dengan perintah JOIN) tabel-tabel dalam query Anda.
Setiap cara tersebut akan didiskusikan secara lebih detil berikut.

Mereferensi Dua Tabel
Anda dapat membedakan dua tabel dalam database Anda dengan mereferensinya dalam statemen SELECT, seperti berikut:

// membaca nama-nama konsumen dari tabel konsumen dan membaca total_pesanan dari
// tabel pesanan dimana bidang ID_konsumen dalam tabel konsumen sama dengan
// bidang ID_konsumen dalam tabel pesanan.
SELECT
    konsumen.nama, pesanan.total_pesanan
FROM
    konsumen, pesanan
WHERE
    konsumen.ID_konsumen = pesanan.ID_konsumen

Jika ID konsumen adalah 123, maka Anda akan melihat semua total_pesanan untuk semua pesanan dari konsumen tersebut, sehingga Anda dapat menentukan semua uang yang telah dibelanjakan oleh konsumen 123 di toko Anda.

Meskipun Anda menghubungkan dua tabel melalui bidang ID_konsumen, nama-nama tidak perlu sama. Anda dapat membandingkan sembarang dua nama bidang dari dua tabel. Contohnya diberikan beriku ini.

// membaca nama-nama konsumen dari tabel konsumen dan membaca total_pesanan dari
// tabel pesanan dimana bidang email pada tabel konsumen sama dengan
// bidang emailpelanggan pada tabel pesanan.
SELECT
    konsumen.nama, pesanan.total_pesanan
FROM
    konsumen, pesanan
WHERE
    konsumen.email = pesanan.emailpelanggan

Contoh
Mereferensi dua tabel
1.     Ubahlah program pada file seleksi2.php Anda seperti ditunjukkan berikut (perubahan disoroti):

<?php
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

// memilih judul film dan genrenya setelah tahun 1990
$query = 'SELECT
    film.nama_film, tipefilm.label_tipefilm
FROM
    film, tipefilm
WHERE
    film.tipe_film = tipefilm.id_tipefilm AND
    tahun_film > 1990
ORDER BY
    tipe_film';
$hasil = mysql_query($query, $db) or die(mysql_error($db));

// menampilkan hasil
echo '<table border="1">';
while ($baris = mysql_fetch_assoc($hasil)) {
    echo '<tr>';
    foreach ($baris as $nilai) {
        echo '<td>' . $nilai . '</td>';
    }
    echo '</tr>';
}
echo '</table>';
?>

2.    Simpan skript Anda dan jalankan. Layar Anda akan tampak seperti berikut:



Menggabungkan Dua Tabel
Dalam hidup seperti kode pemrograman, tanpa memandang situasi dimana dua hal disatukan, bukanlah perkara mudah. Seringkali hal itu disertai dengan kondisi dan konsekuensi.

Dalam dunia MySQL, penggabungan juga hal yang kompleks. Hal ini akan didiskusikan pada Bab 9 secara detil. Untuk sementara ini, Anda akan disodori contoh sederhana dalam menggunakan join sehingga Anda dapat merasakan nikmatnya penggabungan itu. Fungsi JOIN memberikan pada Anda kendali yang lebih besar dalam bagaimana tabel-tabal pada database Anda berelasi dan bagaimana satu sama lain dikoneksikan. Tentu saja, hal ini memerlukan pemahaman yang lebih utuh tentang database relasional (pada Bab 9).

Contoh
Menggabungkan dua tabel
1.     Ubahlah program pada file seleksi2.php Anda seperti ditunjukkan berikut (perubahan disoroti):

<?php
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77') or
  die ('Tidak bisa terhubung. Periksa parameter koneksi.');
mysql_select_db('situsfilm', $db) or die(mysql_error($db));

// memilih judul film dan genrenya setelah tahun 1990
$query = 'SELECT
    nama_film, label_tipefilm
FROM
    film LEFT JOIN tipefilm ON tipe_film = id_tipefilm
WHERE
    film.tipe_film = tipefilm.id_tipefilm AND
    tahun_film > 1990
ORDER BY
    tipe_film';
$hasil = mysql_query($query, $db) or die(mysql_error($db));

// menampilkan hasil
echo '<table border="1">';
while ($baris = mysql_fetch_assoc($hasil)) {
    echo '<tr>';
    foreach ($baris as $nilai) {
        echo '<td>' . $nilai . '</td>';
    }
    echo '</tr>';
}
echo '</table>';
?>

2.    Simpan file tersebut dan jalankan dalam browser Anda.

Anda akan melihat hasil yang sama seperti contoh sebelumnya. Seperti yang dapat Anda perhatikan, Anda hanya perlu mencantumkan semua bidang yang ingin Anda lihat, tanpa memedulikan dari tabel mana bidang tersebut berasal. Anda melakukannya pada baris pertama dari statemen SELECT:

$query = 'SELECT
    nama_film, label_tipefilm

Kemudian Anda memberitahu MySQL tabel-tabel mana yang ingin Anda akses dan apa tipe penggabungan yang digunakan untuk menyatukannya, seperti pada statemen berikut:

FROM
    film LEFT JOIN tipefilm

Anda menggunakan statemen LEFT JOIN pada kasus ini. Penggabungan LEFT, dengan bahasa sederhana, menyatakan bahwa tabel kedua (tipefilm pada kasus ini) bergantung pada tabel pertama (film). Anda membaca informasi utama dari tabel film dan mencari informasi dari tipefilm.

Anda kemudian memberitahu server tentang bidang mana yang dipakai untuk menggabungkan keduanya, dengan:

ON tipe_film = id_tipefilm

Anda tetap mempertahankan kondisi agar hanya menampilkan semua film yang dibuat setelah tahun 1990, dan mengurutkannya berdasarkan tipe film:

WHERE
    film.tipe_film = tipefilm.id_tipefilm AND
    tahun_film > 1990
ORDER BY
    tipe_film';

phpMyAdmin
Setelah Anda belajar tentang MySQL dan PHP dari dasar, Anda tentu ingin mengetahui tentang phpMyAdmin. Fasilitas phpMyAdmin merupakan projek open source yang dapat Anda pakai untuk mengakses database MySQL melalui sebuah aplikasi desktop GUI.

Dengan GUI ini, Anda dapat dengan mudah melakukan hal berikut:
D        Menghapus dan menciptakan database.
D        Menciptakan, mengedit, dan menghapus tabel.
D        Menciptakan, mengedit, dan menghapus bidang.
D        Memasukkan statemen MySQL.
D        Melihat dan menampilkan struktur tabel.
D        Membangkitkan kode PHP.
D        Melihat data dalam format tabel.









No comments:

Post a Comment