BAB 6 BERKOMUNIKASI DENGAN DATABASE DARI SKRIP PHP
6.3 Berkomunikasi dengan MySQL
Bab ini menjelaskan cara mengakses MySQL dari skrip PHP. Kueri SQL dikirim ke MySQL menggunakan fungsi PHP. Berkomunikasi dengan MySQL melibatkan langkah-langkah berikut:
1. Hubungkan ke server MySQL.
2. Kirim kueri SQL.
Di bagian ini, kita memberi tahu kita cara melakukan kedua langkah tersebut, dan kita memberi tahu kita cara mengirim beberapa kueri.
Menghubungkan ke server MySQL
Sebelum kita dapat menyimpan atau mendapatkan data apa pun, kita harus terhubung ke database, yang mungkin berada di komputer yang sama dengan skrip PHP kita atau di komputer yang berbeda. Kita tidak perlu mengetahui detail koneksi ke database karena PHP menangani detailnya, sekarang, yang perlu kita ketahui adalah nama dan lokasi database, bersama dengan nama user dan kata sandi untuk mengaksesnya. Pikirkan koneksi database dengan cara yang sama seperti kita memikirkan koneksi telepon. Kita tidak perlu mengetahui detail tentang bagaimana koneksi dibuat — yaitu, bagaimana kata-kata kita berpindah dari telepon kita ke telepon lain — kita hanya perlu mengetahui kode area dan nomor telepon.
Perusahaan telepon menangani detailnya.
Untuk terhubung ke server MySQL, kita perlu mengetahui nama komputer tempat database berada dan ID user dan kata sandi akun MySQL Anda. Untuk sebagian besar kueri, kita juga perlu mengetahui nama database yang ingin kita gunakan untuk berinteraksi. Untuk membuka koneksi, gunakan fungsi mysqli_connect:
$cxn = mysqli_connect(“host”,”acct”,”password”,”dbname”) or die (“message”);
Isi informasi berikut:
• host: Nama komputer tempat MySQL diinstal — misalnya, databasehost.example.com. Jika database MySQL berada di komputer yang sama dengan situs web Anda, kita dapat menggunakan localhost sebagai nama komputer.
Jika kita membiarkan informasi ini kosong (“”), PHP mengasumsikan localhost.
• acct: Nama akun MySQL yang valid.
• password: Kata sandi untuk akun MySQL ditentukan oleh acct. Jika akun MySQL tidak memerlukan kata sandi, jangan ketik apa pun di antara tanda kutip: "".
• dbname: Nama database yang ingin kita gunakan untuk berkomunikasi. Parameter ini opsional — kita dapat memilih database nanti, dengan perintah terpisah, jika diinginkan. Kita dapat memilih database yang berbeda kapan saja dalam skrip Anda.
Jika kita menggunakan fungsi mysql, kita tidak dapat memilih database di fungsi koneksi. Kita harus menggunakan fungsi terpisah — mysql_select_db — untuk memilih database.
• pesan: Pesan yang dikirim ke browser jika koneksi gagal. Sambungan gagal jika komputer atau jaringan mati, atau jika server MySQL tidak berjalan. Ini juga mungkin gagal jika informasi yang diberikan tidak benar — misalnya, jika kata sandi mengandung kesalahan ketik. Kita mungkin ingin menggunakan pesan deskriptif selama pengembangan, seperti Tidak dapat terhubung ke server, tetapi pesan yang lebih umum cocok untuk pelanggan setelah kita menggunakan aplikasi, seperti Katalog tidak tersedia saat ini. Silakan coba lagi nanti.
Host menyertakan nomor port yang diperlukan untuk koneksi. Hampir selalu, nomor portnya adalah 3306. Terkadang, administrator MySQL perlu mengatur MySQL agar terhubung pada port yang berbeda. Dalam kasus ini, nomor port diperlukan untuk koneksi. Nomor port ditentukan sebagai hostname:portnumber. Misalnya, kita mungkin menggunakan localhost:8808. Dengan pernyataan ini, mysqli_connect mencoba membuka koneksi ke komputer yang disebutkan, menggunakan nama akun dan kata sandi yang diberikan. Jika koneksi gagal, skrip berhenti berjalan dan mengirim pesan ke browser. Pernyataan berikut
terhubung ke server MySQL di komputer lokal, menggunakan akun MySQL bernama phpuser yang tidak memerlukan kata sandi:
$cxn = mysqli_connect(“localhost”,”phpuser”,””,”Customer”) or die (“Couldn’t connect to server.”);
Untuk alasan keamanan, kita harus menyimpan informasi koneksi dalam variabel dan menggunakan variabel dalam pernyataan koneksi, sebagai berikut:
$host=”localhost”;
$user=”phpuser”;
$password=””;
$dbname = “Customer”;
$cxn = mysqli_connect($host,$user,$password,$dbname) or die(“Couldn’t connect to server.”);
atau, untuk lebih amannya, kita dapat meletakkan pernyataan penugasan untuk informasi koneksi di file terpisah di lokasi tersembunyi sehingga nama akun dan kata sandi ti dak ada di skrip. Kita memasukkan informasi akun dari file dengan menggunakan pernyataan include.
Variabel $cxn berisi informasi yang mengidentifikasi koneksi. Kita dapat membuka lebih dari satu koneksi sekaligus dengan menggunakan lebih dari satu nama variabel. Sambungan tetap terbuka hingga kita menutupnya atau hingga skrip berakhir. Kita menutup koneksi sebagai berikut:
mysqli_close($connectionname);
Misalnya, untuk menutup koneksi pada contoh sebelumnya, gunakan pernyataan ini:
mysqli_close($cxn);
Mengirim pernyataan SQL
Setelah kita memiliki koneksi terbuka ke server MySQL, kita mengirim kueri pernyataan SQL Anda. Untuk berinteraksi dengan database, masukkan pernyataan SQL kita ke dalam variabel dan kirimkan ke server MySQL dengan fungsi mysqli_query, seperti pada contoh berikut:
$query = “SELECT * FROM Customer”;
$result = mysqli_query($cxn,$query) or die (“Couldn’t execute query.”);
Kueri dijalankan pada database yang saat ini dipilih untuk koneksi yang ditentukan.
Variabel $result menyimpan informasi tentang hasil eksekusi kueri tetapi bukan hasil sebenarnya. Informasi dalam $result tergantung pada apakah kueri mendapatkan informasi dari database atau tidak:
• Untuk kueri atau pernyataan yang tidak mendapatkan data apa pun: Variabel $result berisi informasi tentang apakah kueri atau pernyataan berhasil dieksekusi atau tidak.
Jika berhasil, $result disetel ke true; jika tidak berhasil, $result disetel ke false.
Beberapa kueri dan pernyataan yang tidak mengembalikan data adalah INSERT dan UPDATE.
• Untuk kueri yang mengembalikan data: Variabel $result berisi pengidentifikasi hasil yang menentukan lokasi data yang dikembalikan, bukan data yang dikembalikan itu sendiri. Beberapa kueri yang mengembalikan data adalah SELECT dan SHOW.
Penggunaan tanda kutip tunggal dan ganda dapat sedikit membingungkan saat menetapkan kueri atau pernyataan ke variabel $query. Kita sebenarnya menggunakan tanda kutip pada dua tingkat: tanda kutip yang menetapkan string ke $query dan tanda kutip yang merupakan bagian dari bahasa SQL itu sendiri. Panduan berikut dapat membantu kita menghindari masalah dengan tanda kutip saat bekerja dengan SQL:
• Gunakan tanda kutip ganda di awal dan akhir string.
• Gunakan tanda kutip tunggal sebelum dan sesudah nama variabel.
• Gunakan tanda kutip tunggal sebelum dan sesudah nilai literal.
Pernyataan berikut menunjukkan contoh menetapkan string SQL ke variabel di PHP:
$query = “SELECT firstName FROM Customer”;
$query = “SELECT firstName FROM Customer WHERE lastName=’Prakasa’”;
$query = “UPDATE Customer SET lastName=’$last_name’”;
Pernyataan SQL itu sendiri tidak menyertakan titik koma (;), jadi jangan letakkan titik koma di dalam kutipan terakhir. Satu-satunya titik koma muncul di bagian paling akhir, seperti yang ditunjukkan pada contoh sebelumnya; ini adalah titik koma PHP yang mengakhiri pernyataan.
Mengirim beberapa pertanyaan
Terkadang, kita ingin mengirim dua atau lebih kueri secara bersamaan. MySQL memungkinkan kita melakukannya, tetapi kita perlu menggunakan fungsi yang berbeda untuk mengirim kueri. Kita dapat mengirim beberapa kueri dengan fungsi berikut:
mysqli_multi_query($cxn,$query)
Anda mengirim kueri dalam satu string dengan kueri dipisahkan oleh titik koma:
$query = “SELECT * FROM Cust;SELECT * FROM OldCust”; mysqli_multi_query($cxn,$query);
Fungsi multiple_query tidak tersedia dengan fungsi mysql, hanya dengan fungsi mysqli.
Mengirim kueri bisa jadi kurang aman daripada mengirim satu kueri. Setiap kali kita menggunakan data dari sumber luar, pastikan kita memvalidasi data luar secara menyeluruh.
Misalnya, kita menampilkan formulir yang meminta nama tabel kepada pengguna, dan kita membuat kueri dari nama tabel yang dimasukkan pengguna, sebagai berikut:
$query = “SELECT * FROM Friend”;
User memasukkan nama tabel Teman. Permintaannya baik-baik saja. Namun, misalkan user memasukkan yang berikut ini ke dalam formulir:
Friend;DELETE TABLE Friend
Pertanyaan kita kemudian adalah
$query = “SELECT * FROM Friend;DELETE TABLE Friend”;
Jika kita mengirim kueri ini, kuerinya tidak begitu baik. Kita tidak akan menyukai hasilnya. Kita mungkin tidak ingin tabel dihapus. Pastikan untuk selalu membersihkan data sebelum mengirimnya ke MySQL!
Memilih Database
Jika kita tidak memilih database dalam fungsi koneksi, kita dapat memilih database dengan menggunakan fungsi mysqli_select_db. Kita juga dapat menggunakan fungsi ini untuk memilih database yang berbeda kapan saja di skrip Anda. Formatnya adalah
mysqli_select_db($cxn,”databasename”) or die (“message”);
Jika kita menggunakan fungsi mysql, bukan fungsi mysqli, kita harus memilih database dalam fungsi terpisah, menggunakan mysql_select_db. Isi informasi berikut:
• cxn: Variabel yang berisi informasi koneksi.
• databasename: Nama database.
• message: Pesan yang dikirim ke browser jika database tidak dapat dipilih. Pemilihan mungkin gagal karena database tidak dapat ditemukan, yang biasanya merupakan hasil salah ketik pada nama database.
Misalnya, kita dapat memilih database Pelanggan dengan yang penyataan berikut:
mysqli_select_db($cxn,”Customer”) or die (“Couldn’t select database.”);
Jika mysqli_select_db tidak dapat memilih database, skrip berhenti berjalan dan pesan Tidak dapat memilih database. dikirim ke browser. Database tetap dipilih hingga kita memilih database yang berbeda. Untuk memilih database yang berbeda, cukup gunakan pernyataan fungsi mysqli_select_db baru.