BAB 6 BERKOMUNIKASI DENGAN DATABASE DARI SKRIP PHP
6.4 Menangani Kesalahan MySQL
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.
Karena kita mengetik "rot" daripada "root", kita melihat pesan peringatan yang mirip dengan yang ini:
Warning: Access denied for user: ‘rot@localhost’ (Using password: NO) ...
Pesan kesalahan sebelumnya berisi informasi yang kita perlukan untuk memecahkan masalah
— pesan ini menunjukkan nama akun kita yang salah ketik. Namun, setelah skrip kita berjalan dan pelanggan menggunakannya, kita tidak ingin user kita melihat pesan kesalahan teknis yang menunjukkan ID user Anda. Kita ingin mematikan kesalahan PHP atau mengirimkannya ke file log kesalahan. Kita kemudian dapat menggunakan pernyataan die untuk menghentikan skrip dan menampilkan pesan sopan kepada pengguna, sebagai berikut:
$cxn = mysqli_connect($host,$user,$password)
or die(“The Catalog is not available at the moment. Please try again later.”);
Ketika fungsi mysqli_query() gagal, MySQL mengembalikan pesan kesalahan yang berisi informasi tentang penyebab kegagalan. Namun, pesan ini tidak ditampilkan kecuali kita secara khusus menampilkannya. Sekali lagi, kita mungkin ingin melihat pesan-pesan ini saat kita mengembangkan skrip, tetapi kita mungkin tidak ingin menampilkannya ke publik. Kita dapat menampilkan kesalahan MySQL yang dikembalikan dengan menggunakan fungsi berikut:
mysqli_error($cxn)
Misalnya, kita mungkin menyertakan fungsi dalam kode Anda, sebagai berikut:
$query = “SELECT * FROM Cust”;
$result = mysqli_query($cxn,$query) or die (“Error: “.mysqli_error($cxn));
Dalam contoh ini, jika pemanggilan fungsi gagal, pernyataan die menampilkan kesalahan MySQL, yang mungkin seperti ini:
Error: Table ‘catalog.cust’ doesn’t exist
Terkadang, kita mungkin ingin melakukan tindakan tambahan jika fungsi gagal, seperti menghapus variabel atau menutup koneksi database. Kita dapat melakukan tindakan tersebut dengan menggunakan pernyataan bersyarat:
if(!$result = mysqli_query($cxn,$query)) {
echo mysqli_error($cxn);
unset($auth);
exit();
}
Jika pemanggilan fungsi gagal, pernyataan di blok if akan dieksekusi. Pernyataan gema menampilkan kesalahan MySQL yang dikembalikan oleh fungsi. Sebuah variabel dihapus, dan skrip keluar. Perhatikan ! (tanda seru) dalam pernyataan if. ! berarti “tidak”. Dengan kata lain, pernyataan if benar jika pernyataan penugasan tidak benar.
6.5 FUNGSI MySQL
Anda mungkin bertanya-tanya mengapa ada orang yang ingin menggunakan fungsi MySQL ketika PHP hadir dengan sejumlah fungsi hebatnya sendiri. Jawabannya sangat sederhana: fungsi MySQL bekerja pada data yang ada di database. Jika kita menggunakan PHP, pertama-tama kita harus mengekstrak data mentah dari MySQL, memanipulasinya, dan kemudian melakukan kueri database yang kita inginkan.
Untuk melakukan kueri kompleks tanpa menghabiskan banyak waktu kita dapat menggunakan fungsi. Jika Anda tertarik untuk mempelajari tentang string dan fungsi tanggal/waktu yang tersedia lebih lanjut, Anda dapat mengunjungi URL berikut:
http://tinyurl.com/mysqlstrings http://tinyurl.com/mysqldates.
Menggunakan Fungsi mysqli Bermanfaat Lainnya
Fungsi mysqli berguna lainnya tersedia untuk kita gunakan dalam skrip PHP Anda.
Subbagian berikut menjelaskan cara menggunakan fungsi mysqli untuk menghitung jumlah baris yang dikembalikan oleh kueri, menentukan entri terakhir yang dibuat secara otomatis, menghitung baris yang terpengaruh oleh kueri, dan karakter escape.
Menghitung jumlah baris yang dikembalikan oleh kueri
Seringkali, kita ingin tahu berapa banyak baris yang dikembalikan oleh kueri SQL Anda.
Kueri kita menentukan kriteria yang harus dipenuhi informasi untuk dikembalikan, seperti status harus sama dengan TX atau LastName harus sama dengan Prakasa. Fungsi mysqli_num_rows memberi tahu kita berapa banyak baris yang ditemukan yang memenuhi kriteria.
Halaman login sering menggunakan fungsi ini. Ketika user mencoba untuk masuk, dia mengetikkan nama user dan kata sandi ke dalam formulir HTML. Skrip PHP kita kemudian memeriksa nama user dan kata sandi dalam database. Jika ditemukan, nama user dan kata sandi valid. Kita mungkin menggunakan kode yang mirip dengan berikut ini:
$query = “SELECT * FROM ValidUser WHERE acct = ‘$_POST[userID]
AND password = ‘$password’”;
$result = mysqli_query($cxn,$query);
$n = mysql_num_rows($result);
if($n < 1) {
echo “User name and password are not valid”;
exit();
}
Dalam kode ini, kueri SQL mencari baris dengan nama user (disebut acct dalam contoh ini) dan kata sandi yang diberikan oleh user dalam formulir. Kode kemudian menguji hasil kueri untuk melihat berapa banyak baris yang dikandungnya. Jika hasilnya tidak berisi baris apa pun, yaitu kurang dari satu baris, user dengan nama user dan kata sandi yang diberikan tidak ada di
database, dan dengan demikian, informasi akun tidak valid dan user tidak diizinkan untuk masuk di.
Menentukan entri otomatis terakhir
Banyak tabel database berisi field AUTO_INCREMENT. Ini adalah field serial di mana MySQL menambahkan nilai field secara otomatis. Ketika sebuah baris ditambahkan, MySQL memberikan field AUTO_INCREMENT nilai seri berikutnya setelah baris sebelumnya. Field tersebut sering didefinisikan sebagai pengidentifikasi unik atau kunci utama untuk tabel.
Karena MySQL menambahkan nilai otomatis, kita tidak perlu tahu nilai mana yang disimpan di field untuk baris baru. Dalam beberapa situasi, kita perlu mengetahui nomornya sehingga kita dapat menggunakannya nanti dalam skrip. Fungsi mysqli_insert_id mengembalikan nomor yang terakhir ditambahkan ke field AUTO_INCREMENT.
Satu situasi di mana kita perlu mengetahui nomor MySQL yang disimpan di lapangan adalah saat kita menyimpan pesanan dan memesan item dalam tabel terpisah. Misalnya, jika kita mendefinisikan field orderID sebagai field AUTO_INCREMENT, MySQL menambahkan nomor ke field orderID. Namun, kita perlu menyimpan nomor ini di tabel OrderItem sehingga kita bisa menghubungkan item ke pesanan. Kita mungkin menggunakan kode yang mirip dengan berikut ini:
$query = “INSERT INTO CustomerOrder (customerID,orderDate) VALUES ($customerID,$date)”;
$result = mysqli_query($cxn,$query);
$orderID = mysqli_insert_id($cxn);
$query = “INSERT INTO OrderItem (orderID,color,size,price) VALUES ($orderID,$color,$size,$price)”;
$result = mysqli_query($cxn,$query);
Dalam kueri pertama, orderID tidak ditentukan, jadi MySQL menyimpan nomor seri berikutnya di field itu. Dalam kueri kedua, ID pesanan yang dimasukkan dalam kueri sebelumnya dimasukkan ke dalam tabel kedua.
Menghitung baris yang terpengaruh
Beberapa kueri SQL mengubah database, tetapi tidak mengembalikan data apa pun.
Misalnya, kueri UPDATE dapat mengubah data dalam tabel, tetapi tidak mengembalikan data apa pun. Dalam hal ini, pernyataan UPDATE dapat memengaruhi satu, banyak, atau nol baris.
Misalnya, berikut ini adalah pernyataan UPDATE:
$stmt = “UPDATE Customer SET lastName = “Prakasa” WHERE lastName = “Prakasa”;
Pernyataan ini akan mengubah nama belakang apa pun dalam tabel dengan nilai Prakasa menjadi Prakasa.
Dalam beberapa kasus, kita mungkin perlu mengetahui berapa banyak baris yang diubah oleh pernyataan tersebut. Dalam contoh ini, mungkin tidak ada seorang pun di database dengan nama Prakasa atau mungkin ada ratusan. Kita dapat mengetahui berapa banyak baris yang diperbarui dengan fungsi mysqli_affected_rows. Fungsi ini mengembalikan jumlah baris yang dipengaruhi oleh pernyataan UPDATE, INSERT, REPLACE, atau DELETE terakhir.
Misalkan kita ingin mengatur field dalam tabel yang mengidentifikasi siswa yang lulus ujian. Kita mungkin juga ingin tahu berapa banyak siswa yang lulus. Kita mungkin menggunakan kode yang mirip dengan berikut ini:
$query = “UPDATE Student SET status=’pass’ WHERE score > 50”;
$result = mysqli_query($cxn,$query);
$passed = mysqli_affected_rows($cxn);
echo “$passed students passed”;
Dalam kode ini, setiap siswa dalam tabel yang nilainya lebih tinggi dari 50 lulus ujian. Variabel
$lulus berisi jumlah siswa yang nilainya cukup tinggi sehingga field status mereka diperbarui menjadi "lulus".
Escaping Character
Saat kita menyimpan informasi string apa pun di database Anda, kita harus keluar dari karakter khusus. Ini adalah ukuran keamanan yang penting. Versi PHP sebelum versi 6 menyediakan fitur yang disebut tanda kutip ajaib yang secara otomatis keluar dari semua string dalam array $_POST dan $_GET. Tanda kutip tunggal, tanda kutip ganda, garis miring terbalik, dan karakter nol diloloskan. Fitur ini, dirancang untuk membantu user pemula, dikendalikan oleh pengaturan magic_quotes-gpc di php.ini dan diaktifkan secara default di PHP 4 dan PHP 5. Di PHP 6, fitur kutipan ajaib tidak lagi tersedia.
Fitur kutipan ajaib menghasilkan banyak pelarian yang tidak efisien dan tidak perlu. Ini juga terkadang menghasilkan pelarian yang tidak diinginkan. Secara umum, kita menyarankan kita mematikan tanda kutip ajaib di file php.ini Anda. Membuat perubahan pada php.ini dibahas secara lebih rinci dalam Buku IV, Bab 1. Karena penting bahwa kita menghindari data kita sebelum menyimpannya, jika fitur tanda kutip ajaib dimatikan, kita harus menghapus data kita secara manual. Fungsi mysqli_real_escape_string disediakan untuk tujuan ini. Sebelum menyimpan data apa pun dalam database, terapkan fungsi ke dalamnya. Baris berikut menunjukkan beberapa kemungkinan kode yang lolos dari data sehingga aman untuk disimpan dalam database:
$lastName = mysqli_real_escape_string($lastName);
$lastName = mysqli_real_escape_string($_POST[‘lastName’]);
Buku ini mengasumsikan kita menggunakan PHP 5 atau lebih baru dengan fungsi mysqli untuk berinteraksi dengan MySQL 5.0 atau 5.1. Jika kita menggunakan PHP 4, fungsi mysqli tidak tersedia. Sebagai gantinya, kita menggunakan fungsi mysql, bahkan dengan versi MySQL yang lebih baru. Fungsi mysql dapat berkomunikasi dengan versi MySQL yang lebih baru, tetapi mereka tidak dapat mengakses beberapa fitur baru yang ditambahkan di versi MySQL yang lebih baru. Fungsi mysql diaktifkan secara otomatis di PHP 4. Sepanjang buku ini, contoh dan skrip menggunakan MySQL 5.0 dan fungsi mysqli untuk berkomunikasi dengan MySQL. Fungsi PHP untuk digunakan dengan MySQL 5.0 memiliki format umum berikut:
mysqli_function(value,value,...);
Di dalam nama fungsi adalah singkatan dari perbaikan (MySQL Improved). Bagian kedua dari nama fungsi khusus untuk fungsi tersebut, biasanya sebuah kata yang menjelaskan apa yang dilakukan fungsi tersebut. Selain itu, fungsi biasanya memerlukan satu atau lebih nilai untuk diteruskan, yang menentukan detail seperti koneksi database atau lokasi data. Berikut adalah dua fungsi mysqli yang dibahas sebelumnya dalam bab ini:
mysqli_connect(connection information);
mysqli_query($cxn,”SQL statement”);
Fungsi mysql yang sesuai adalah
mysql_connect(connection information);
mysql_query(“SQL statement”,$cxn);
Fungsionalitas dan sintaks dari fungsi serupa, tetapi tidak identik, untuk semua fungsi. Secara khusus, fungsi mysqli menggunakan proses yang berbeda untuk menghubungkan ke server MySQL daripada fungsi mysql. Format fungsi mysqli adalah:
mysqli_connect($host,$user,$password,$dbname);
Proses koneksi untuk fungsi mysql memerlukan dua panggilan fungsi:
mysql_connect($host,$user,$password); mysql_select_db($dbname);
Jika kita perlu menggunakan fungsi mysql, daripada fungsi mysqli, kita perlu mengedit skrip dalam buku ini, mengganti fungsi mysqli dengan fungsi mysql. Tabel dibawah ini menunjukkan sintaks fungsi mysqli dan sintaks fungsi mysql yang setara.
Tabel 6.1 Sintaks untuk Fungsi mysql dan mysqli
Fungsi mysqli Fungsi mysql
mysqli_connect($host,$user,
$passwd,$dbname)
mysql_ connect($host,$user, $passwd) followed by mysql_select_db($dbname) mysqli_errno($cxn) mysql_errno() or mysql_ errno($cxn) mysqli_error($cxn) mysql_error() or mysql_ error($cxn) mysqli_fetch_array($result mysql_fetch_ array($result)
mysqli_fetch_assoc($result) mysql_fetch_ assoc($result) mysqli_fetch_row($result) mysql_fetch_row($result) mysqli_insert_id($cxn) mysql_insert_id($cxn) mysqli_num_rows($result mysql_num_rows($result)
mysqli_query($cxn,$sql) mysql_query($sql) or
mysql_query($sql,$cxn) mysqli_select_db($cxn, $dbname) mysql_select_db($dbname) mysqli_real_escape_ string($cxn,$data) mysql_real_escape_ string($data)
BAB 7
SETTING UP MySQL
Lingkungan MySQL mencakup perangkat lunak database MySQL dan program pendukung yang dapat kita gunakan untuk mengelola database MySQL Anda. Perangkat lunak MySQL terdiri dari server database MySQL, beberapa program utilitas yang membantu dalam administrasi database MySQL, dan beberapa perangkat lunak pendukung yang dibutuhkan server MySQL (tetapi kita tidak perlu mengetahuinya). Inti dari MySQL adalah server MySQL, yang mengelola database. Saat kita berinteraksi dengan database, kita mengirim pesan dengan permintaan ke server database, yang merespons dengan mengikuti instruksi dalam permintaan — menyimpan data, mendapatkan data, dan sebagainya. Untuk menggunakan database MySQL, kita perlu menggunakan perangkat lunak yang dapat berkomunikasi dengan server MySQL. Ketika kita menginstal MySQL, program client mysql diinstal secara otomatis.
Program ini memungkinkan kita untuk mengelola database MySQL Anda. Dalam bab ini, kita memberi tahu kita apa yang perlu kita ketahui agar kita dapat mengaktifkan dan menjalankan MySQL, dan kita juga menyertakan beberapa info tentang pengujian penginstalan serta melakukan beberapa pemecahan masalah jika kita mengalami masalah.
7.1 MEMERIKSA INSTALASI MySQL
Anda mungkin atau mungkin tidak perlu menginstal MySQL. MySQL tidak dilengkapi dengan sistem operasi Windows, tetapi dalam banyak kasus di sistem operasi lain, MySQL sudah diinstal. Misalnya, Linux dan Mac terbaru distribusi secara otomatis menginstal MySQL.
Mencari tahu apakah MySQL sedang berjalan atau diinstal
Sebelum menginstal MySQL, pastikan kita benar-benar perlu menginstalnya. Mungkin sudah berjalan di komputer Anda, atau mungkin sudah diinstal tetapi tidak berjalan ning.
Berikut cara memeriksa apakah MySQL sedang berjalan:
• Windows: Jika MySQL berjalan, itu akan berjalan sebagai layanan. Untuk memeriksa ini, pilih Start➪Control Panel➪Alat Administratif➪Layanan dan gulir ke bawah daftar layanan menurut abjad. Jika MySQL diinstal sebagai layanan, itu muncul dalam daftar.
Jika sedang berjalan, statusnya menampilkan Mulai. Jika kita menemukan MySQL dalam daftar layanan tetapi belum dimulai, kita dapat memulainya dengan menyorot MySQL di daftar layanan dan mengklik Mulai Layanan di panel kiri.
• Linux/Unix/Mac: Pada baris perintah, ketik berikut ini:
ps –ax
Outputnya harus berupa daftar program. Beberapa sistem operasi (biasanya rasa Unix) memiliki opsi berbeda untuk perintah ps. Jika sebelumnya tidak menghasilkan daftar program yang sedang berjalan, ketik man ps untuk melihat opsi mana yang perlu kita gunakan. Dalam daftar program yang muncul, cari yang bernama mysqld. Jika kita menemukannya, MySQL sedang berjalan.
Bahkan jika MySQL saat ini tidak berjalan, mungkin diinstal tetapi tidak dimulai. Berikut cara memeriksa untuk melihat apakah MySQL sudah terinstal di komputer Anda:
• Windows: Jika kita tidak menemukan MySQL dalam daftar layanan saat ini, cari direktori atau file MySQL. Kita dapat mencari dengan memilih Start➪Search. Direktori penginstalan default adalah C:\Program Files\MySQL\MySQL Server nomor versi untuk versi terbaru atau C:\mysql untuk versi yang lebih lama.
• Linux/Unix/Mac: Ketik perintah berikut:
find / -name “mysql*”
Jika direktori bernama mysql ditemukan, kemungkinan MySQL telah terinstal.