Dalam rangka pembuatan aplikasi web yang dinamis berbasis PHP, salah satu komponen yang dibutuhkan adalah database. Dan sistem database yang sering digunakan adalah MySQL/MariaDB.
Manfaat utama penggunaan database adalah kita dapat secara dinamis mengolah dan menampilkan data tanpa harus mengutak-atik kode PHP.
Table of Contents
Interaksi PHP Mysql
MySql berkomunikasi dengan PHP menggunakan ekstensi bernama php_mysql atau php_mysqli. Dewasa ini ekstensi yang lebih sering digunakan adalah php_mysqli karena keterbatasan-keterbatasan yang dimiliki oleh ekstensi php_mysql.
Membuat koneksi PHP dengan MySQL
Contoh penggunaan koneksi standar adalah sebagai berikut:
$koneksi = mysqli_connect(host, user, password, database, port, socket);
Variabel $koneksi di atas terdiri dari beberapa parameter yang mesti dilewatkan di dalamnya.
- host : berisi informasi tentang host database. Secara default host yang digunakan adalah localhost. Dapat pula menggunakan alamat ip dari lokasi database ( localhost = 127.0.0.1 )
- user : nama user mysql.
- password : password mysql
- database: nama database yang hendak dihubungkan atau digunakan
- port : port yang digunakan untuk membentuk koneksi. Secara default port yang digunakan biasanya 3306.
- socket: socket yang digunakan.
Pada kebanyakan kasus penggunaan PHP Mysql, tidak semua parameter wajib kita masukkan dalam membuat koneksi. Koneksi dapat dibuat dengan lebih ramping seperti berikut ini:
$koneksi = mysqli_connect("localhost", "namauser", "password", "nama_database");
Ketika koneksi berhasil dilakukan, variabel $koneksi akan berisi dengan apa yang disebut connection handle. Kita harus menggunakannya untuk mereferensikan sesi sambungan di beberapa fungsi php_mysqli pustaka lainnya.
Untuk mengganti database kita dapat menggunakan perintah:
mysqli_select_db($koneksi, "database");
Memutuskan koneksi
Ketika kita membuat koneksi ke server MySQL, koneksi akan tetap terbuka dan berjalan selama durasi program tersebut. Ketika server PHP mencapai akhir kode PHP untuk halaman web bersangkutan, secara otomatis program akan menutup koneksi.
Server MySQL memiliki sejumlah koneksi klien terbatas yang didukungnya (didefinisikan oleh file konfigurasi MySQL). Jika kita mengkodekan dalam lingkungan volume tinggi yang memiliki banyak pengguna yang mengakses aplikasi web pada saat yang sama, mungkin penting bahwa aplikasi tersebut menutup koneksi server MySQL sesegera mungkin.
Jika kita bekerja di jenis lingkungan tersebut, kita dapat menutup koneksi server MySQL secara manual segera setelah selesai menggunakannya untuk membantu membebaskan lebih banyak koneksi sesegera mungkin. Kita dapat melakukannya dengan menggunakan fungsi mysqli_close(). Cukup tentukan handle koneksi sebagai parameter tunggal:
mysqli_close($con);
Membuat query database
Setelah membuat koneksi ke server MySQL, kita dapat mulai mengirimkan pernyataan SQL. Kita dapat mengirimkan semua jenis pernyataan, seolah-olah kita bekerja dari antarmuka baris perintah MySQL.
Fungsi prosedural yang kita gunakan untuk mengirimkan kueri ke server MySQL adalah fungsi mysqli_query(). Berikut formatnya:
$dbresult = mysqli_query(handle, query);
Parameter handle adalah pengatur koneksi yang dibuat saat kita terhubung ke server MySQL. Parameter kueri adalah pernyataan teks SQL. Kecuali kita mengirimkan pernyataan SQL yang sangat singkat, telah menjadi praktik umum untuk menyimpan pernyataan SQL dalam variabel agar tidak membuat pernyataan mysqli_query() terlalu rumit:
$query = "SELECT * FROM siswa";
$dbresult = mysqli_query($koneksi, $query);
Mengambil data
Jika kita mengirimkan pernyataan SQL yang akan mengambil data (seperti pernyataan SELECT), handle rangkaian hasil yang dikembalikan akan menunjuk ke data. Kita kemudian dapat mengambil data menggunakan fungsi pustaka mysqli lainnya.
Sebenarnya ada beberapa cara php mysql berbeda untuk mengambil data itu menggunakan fungsi atau metode yang berbeda.
Fungsi | Metode | Deskripsi |
---|---|---|
mysqli_fetch_all | fetch_all() | Mengambil semua data ke dalam bentuk array |
mysqli_fetch_array | fetch_array() | Mengambil record data tertentu ke dalam bentuk array |
mysqli_fetch_assoc | fetch_assoc() | Mengambil record data saat ini dalam hasil yang ditetapkan sebagai array asosiatif |
mysqli_fetch_field_direct() | fetch_field_direct() | Mengambil metadata untuk bidang tertentu ke dalam bentuk himpunan data |
mysqli_fetch_field() | fetch_field() | Mengambil metadata untuk satu bidang dalam himpunan data |
mysqli_fetch_fields() | fetch_fields() | Mengembalikan metadata untuk semua bidang dalam kumpulan hasil sebagai array |
mysqli_fetch_object() | fetch_object() | Mengambil rekaman data saat ini dari hasil yang ditetapkan sebagai objek |
mysqli_fetch_row() | fetch_row() | Mengambil rekaman data saat ini dari hasil yang ditetapkan sebagai array numerik |
mysqli_field_seek() | field_seek() | Mengatur penunjuk kumpulan hasil ke bidang tertentu dalam rekaman data saat ini |
mysqli_free() | free() | Melepaskan memori yang terkait dengan pengatur kumpulan hasil |
Pernyataan fetch php mysql memungkinkan kita untuk menelusuri melalui hasil yang menetapkan satu record data pada satu waktu. Setiap kali kita memanggil pernyataan fetch, ia mengembalikan data dari record data saat ini dalam kumpulan hasil; lalu pointer memindahkan penunjuk ke record data berikutnya dalam hasil yang ditetapkan untuk panggilan berikutnya.
Ketika mencapai akhir data record hasil, data mengembalikan nilai NULL, membuatnya ideal untuk menggunakan pernyataan pengambilan dalam beberapa loop while(). Contoh:
$query = "SELECT * FROM siswa";
$hasil = mysqli_query($koneksi, $query);
while($row = mysqli_fetch_assoc($hasil)) {
echo "<p>Nama : $row['nama']<br>\n";
echo "Kelas: $row['kelas']<br>\n";
echo "Alamat: $row['alamat']<br>\n";
echo "Nilai: $row['nilai']</p>\n;
}
Baca juga: https://framelian.com/cara-membuat-database-menggunakan-mysql/
Menambah data / insert data
Operasi insert menggunakan variabel yang dikirim dari form HTML bisa menggunakan cara seperti berikut ini:
$id = $_POST['id'];
$nama = $_POST['nama'];
$kelas = $_POST['kelas'];
$alamat = $_POST['alamat'];
$nilai = $_POST['nilai'];
$query = "INSERT INTO siswa VALUES ($id, '$nama', '$kelas',
'$alamat','$nilai')";
$dbresult = $db->query($query);
Metode ini berfungsi, tetapi ini adalah cara tersebut berbahaya untuk memasukkan data ke dalam database. Oleh karena itu cara ini tidak dianjurkan dalam operasi php mysql.
Tidak ada jaminan bahwa orang yang menggunakan formulir HTML akan memasukkan data yang benar ke semua bidang data (baik secara tidak sengaja atau sengaja). Juga tidak ada jaminan data yang dikirimkan dalam formulir tidak akan berisi karakter berbahaya yang dimaksudkan untuk menyebabkan masalah dengan database.
Cara pengiriman data yang lebih aman dalam operasi INSERT adalah dengan menggunakan pernyataan prepare, yang menentukan template queri yang ingin kita jalankan di server MySQL, lalu mengirim data terpisah dari template.
Server MySQL menyimpan pernyataan prepare, lalu mencocokkan data yang dikirimkan terhadap template. Ini membantu memfilter data berbahaya. Plus, ini dapat membantu mempercepat mengeksekusi beberapa pernyataan INSERT di server.
Kita hanya mengirimkan satu pernyataan template. Kemudian kita dapat menerapkan beberapa pernyataan data terhadap template yang sama.
Dengan pernyataan yang disiapkan, kita membuat string kueri seperti biasa, tetapi alih-alih menyertakan nilai data, kita menggunakan tanda tanya sebagai tempat penampung untuk setiap nilai, seperti ini:
// $query = "INSERT INTO siswa VALUES ($id, '$nama', '$kelas', '$alamat','$nilai')";
$query = "INSERT INTO siswa VALUES (?, ?, ?, ?, ?)";
Kemudian kita menggunakan pernyataan prepare untuk mengirimkan query tersebut :
$constmt = mysqli_prepare($con, $query);