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