Database
Penanganan Database
- Penanganan database merupakan tujuan utama dalam penggunaan PHP.
- Dengan database, data yang diproses oleh PHP dapat disimpan dan dapat digunakan setiap saat.
- Database yang paling umum digunakan dengan bahasa PHP adalah MySQL, MariaDB dan PostgreSQL.
Database Functions
Berikut daftar function bawaan PHP yang bisa kita gunakan untuk berkomunikasi dengan database.
| Function | Keterangan |
|---|---|
mysqli_affected_row(koneksi) |
Menghasilkan jumlah baris yang terpengaruh oleh operasi MySQL sebelumnya. |
mysqli_autocommit(koneksi, mode) |
Mengeset modifikasi database langsung diproses atau tidak. |
mysqli_change_user(koneksi, username, password, dbname) |
Mengubah user pada koneksi database. |
mysqli_character_set_name(koneksi) |
Menghasilkan karakter default pada koneksi database. |
mysqli_close(koneksi) |
Menutup koneksi database. |
mysqli_commit(koneksi) |
Memproses transaksi database saat ini. |
mysqli_connect_errorno() |
Menghasilkan kode error dari koneksi terakhir. |
mysqli_connect_error() |
Menghasilkan deskripsi error dari koneksi terakhir. |
mysqli_connect(host, username, password, dbname, port, socket) |
Membuka koneksi baru ke MySQL server. |
mysqli_data_seek(result, offset) |
Menuju baris tertentu dari data yang dihasilkan. |
myqsli_debug(message) |
Debug operasi database. |
mysqli_dump_debug_info(koneksi) |
Menghasilkan info debug ke log. |
mysqli_errno(koneksi) |
Menghasilkan kode error terakhir dari beberapa operasi database. |
mysqli_error_list(koneksi) |
Menghasilkan daftar error dari beberapa operasi database. |
mysqli_error(koneksi) |
Menghasilkan deskripsi error terakhir dari beberapa operasi database. |
mysqli_fetch_all(result, result_type) |
Menghasilkan array asosiatif, array numerik atau keduanya dari semua hasil operasi database. result_type dapat diisi MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH. |
mysqli_fetch_array(result, result_type) |
Menghasilkan array asosiatif, array numerik atau keduanya dari hasil operasi database. |
mysqli_fetch_assoc(result) |
Menghasilkan array asosiatif dari hasil operasi dataabse. |
mysqli_fetch_field_direct(result, field_number) |
Menghasilkan meta-data sebuah field dari hasil operasi database, sebagai sebuah objek. |
mysqli_fetch_field(result) |
Menghasilkan field berikutnya dari hasil operasi database, sebagai sebuah objek. |
mysqli_fetch_fields(result) |
Menghasilkan array objek yang merepresentasikan field dari hasil operasi database. |
mysqli_fetch_lengths(result) |
Menghasilkan jumlah kolom dari baris saat ini. |
mysqli_fetch_object(result, classname, parameter) |
Menghasilkan baris dari hasil operasi database sebagai objek. |
mysqli_fetch_row(result) |
Menghasilkan array numerik dari satu baris hasil operasi database. |
mysqli_field_count(koneksi) |
Menghasilkan jumlah kolom dari query sebelumnya. |
mysqli_field_seek(result, field_number) |
Menuju field tertentu. |
mysqli_field_tell(result) |
Menghasilkan posisi field saat ini. |
mysqli_free_result(result) |
Mengosongkan data dari hasil operasi database. |
mysqli_get_client_info(koneksi) |
Menghasilkan versi client library MySQL. |
mysqli_get_connection_stats(koneksi) |
Menghasilkan statistik mengenai koneksi client. |
mysqli_get_host_info(koneksi) |
Menghasilkan nama host server MySQL dan tipe koneksi. |
mysqli_get_proto_info(koneksi) |
Menghasilkan versi protokol MySQL. |
mysqli_get_server_info(koneksi) |
Menghasilkan versi server MySQL. |
mysqli_get_server_version(koneksi) |
Menghasilkan versi server MySQL sebagai integer. |
mysqli_info(koneksi) |
Menghasilkan informasi tentang query yang dieksekusi baru-baru ini. |
mysqli_init() |
Menginisialisasi MySQLi dan menghasilkan resource untuk digunakan dengan mysqli_real_connection(). |
mysqli_insert_id(koneksi) |
Menghasilkan id yang dihasilkan otomatis dari query terakhir. |
mysqli_more_results(koneksi) |
Mengecek apakah ada hasil dari beberapa query. |
mysqli_multi_query(koneksi, query) |
Memproses beberapa query. |
mysqli_next_result(koneksi) |
Mempersiapkan hasil berikutnya dari mysqli_multi_query(). |
mysqli_num_fields(result) |
Menghasilkan jumlah field dari hasil operasi database. |
mysqli_num_rows(result) |
Menghasilkan jumlah baris dari hasil operasi database. |
mysqli_options(koneksi, option, value) |
Menambahkan pengaturan pada koneksi database. |
mysqli_ping(koneksi) |
Mengetes koneksi server atau mencoba koneksi ulang jika koneksi bermasalah. |
mysqli_query(koneksi, query, resultmode) |
Memproses query ke database. resultmode dapat diisi MYSQLI_USE_RESULT, MYSQLI_STORE_RESULT. |
mysqli_real_connect(koneksi, host, username, password, dbname, port, socket, flag) |
Membuka koneksi baru ke MySQL server. |
mysqli_real_escape_string(koneksi, escapestring) |
Meloloskan karakter khusus pada string untuk digunakan pada perintah SQL. |
mysqli_select_db(koneksi, dbname) |
Mengubah database yang terkoneksi. |
Untuk dapat menggunakan function-function di atas, pastikan kamu telah menginstall MySQL/ MariaDB server dan memiliki database di dalamnya.
Praktik Koneksi Database
Agar dapat lebih memahami fungsi-fungsi database pada bahasa pemrograman PHP, mari kita melakukan uji coba.
Instalasi Server
Perhatian
Jika anda sudah mempelajari Tutorial Database MySQL dari panduan yang telah saya buat, maka anda bisa melewai langkah ini.
Sebelum mengakses database menggunakan PHP, silahkan install dulu salah satu server database berikut.
- MySQL ⬇️ Link Download
- MariaDB ⬇️ Link Download
Saya sendiri sebenarnya lebih suka MariaDB, karena aplikasinya opensource dan saat ini lebih aktif dikembangkan daripada MySQL.
Konfigurasi
Setting Ekstensi mysqli
Perhatian
Jika anda praktik menggunakan paket aplikasi XAMPP, Laragon, AppServ, Uwamp, USBWebserver atau yang lain, anda bisa melewati langkah ini.
Karena sejak awal saya praktik menjakankan file php menggunkanan command promt/ terminal pada aplikasi Visual Studio Code dengan memanfaatkan file binary php.exe, maka jika kita akan bekerja dengan database MySQL/ MariaDB kita perlu mengaktifkan ekstensi mysqli. Berikut langkah-langkahnya.
- Buka file eksporer dan masuk ke direktori file binary php, saya asumsikan di
C:\php - Cari file
php.ini. Jika filephp.initidak ada, tentu ada file bernamaphp.ini-development. Maka copy-paste file tersebut dan rename menjadiphp.ini - Buka file
php.inimenggunakan Visual Studio Code, atau sebenarnya Notepad saja cukup. - Cari baris berikut
- Aktifkan pengaturan folder extension dengan menghapus tanda
;di depanextension_dir, kurang lebihnya menjadi seperti ini. - Selanjutnya cari baris berikut
- Aktifkan ekstensi
mysqlidengan menghapus tanda;menjadi
Membuat Sample Database
- Karena kita akan memanipulasi database, mari kita buat contoh databasenya.
- Pastikan service
MariaDB/MySQLdalam kondisi running. - Buka aplikasi HeidiSQL, lalu jalankan query berikut untuk membuat database, tabel beserta sample datanya.
-- membuat database sekolah CREATE DATABASE sekolah; -- mengaktifkan database USE sekolah; -- membuat tabel CREATE table siswa( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(100) NOT NULL, kelas INT(2) NOT NULL, jurusan VARCHAR(4) NOT NULL ); -- menambah sample data INSERT INTO siswa (nama, kelas, jurusan) VALUES ("Dita Leni Ravia", 11, "PPLG" );
Catatan
Anda tidak perlu menulis query di atas secara manual, copy saja dan paste ke tab query yang ada di aplikasi HeidiSQL dan jalankan dengan menekan tombol F9.
File config.php
- Setelah berhasil mengaktifkan ekstensi
mysqliselanjutnya kita buat folder baru untuk menyimpan skrip percobaan CRUD database MySQL dengan PHP. - Misal, buat folder
crud, lalu buat file-file php di dalamnya (sementara kosongan saja) dengan struktur berikut. - Ketikkan skrip berikut ke dalam file
config.php
Uji Coba
- Mari kita uji coba koneksi ke database dengan menjalankan perintah
php -S localhost:80di terminal, dan jangan ditutup. - Buka browser dan ketikkan
localhost/config.php - Jika halaman kosong, itu tandanya skrip php berjalan lancar, bisa tersambung dengan database.
- Namun sebaliknya, jika muncul pesan error, berarti ada yang bermasalah.
- Cek lagi pengaturan
$password,$database,$koneksiserta skrip dalam blokif() - Lalu jalankan ulang.
Menampilkan Data (READ)
Ketikkan skrip berikut ke dalam file index.php, file inilah yang secara default akan diakses jika kita mengetikkan localhost pada browser.
<title>Data Siswa</title>
<style>
table{
border-collapse:collapse;
}
th, td{
border: 1px solid black;
padding:10px;
text-align:center;
}
th{
background:#ccc;
}
a{
text-decoration:none;
}
</style>
<h2>Data Siswa</h2>
<p><a href="tambah.php"> Tambah Siswa </a></p>
<table>
<thead>
<th>No</th>
<th>Nama</th>
<th>Kelas</th>
<th>Jurusan</th>
<th>Aksi</th>
</thead>
<tbody>
<?php
include "config.php";
$query = "SELECT * FROM siswa";
$result = mysqli_query($koneksi, $query);
$no=1;
while($data = mysqli_fetch_assoc($result)){
?>
<tr>
<td><?=$no?></td>
<td><?=$data['nama']?></td>
<td><?=$data['kelas']?></td>
<td><?=$data['jurusan']?></td>
<td>
<a href="edit.php?id=<?=$data['id']?>"> Edit </a> |
<a href="hapus.php?id=<?=$data['id']?>"> Hapus </a>
</td>
</tr>
<?php
$no++;
}
?>
</tbody>
</table>
Uji Coba
- File tersebut berisi campuran skrip HTML, CSS dan PHP.
- Kode HTML dan CSS pada skrip berikut saya buat seminimal mungkin, dan tidak memenuhi kaidah penulisan yang ideal, namun secara fungsi sudah cukup.
- Pahami cara menampilkan data dari database dengan blok perulangan
while, lalu bukalocalhostpada web browser.
Menambah Data (CREATE)
Ketikkan skrip berikut ke dalam file tambah.php dan pahami alur programnya.
<?php
include "config.php";
if($_SERVER['REQUEST_METHOD']=="POST"){
$nama = $_POST['nama'];
$kelas = $_POST['kelas'];
$jurusan = $_POST['jurusan'];
$query = "INSERT INTO siswa SET ";
$query .= "nama = '$nama', ";
$query .= "kelas = '$kelas', ";
$query .= "jurusan = '$jurusan'";
$result = mysqli_query($koneksi,$query);
if(!$result){
echo "Gagal menambah data siswa";
}else{
echo "Berhasil menambah data siswa";
echo "<meta http-equiv='refresh' content='1, index.php'>";
}
}else{
?>
<title>Tambah Siswa</title>
<form action="" method="post">
<fieldset style="width:20%">
<legend>Tambah Siswa</legend>
<p>Nama Siswa</p>
<input type="text" name="nama" id="nama" required>
<p>Kelas</p>
<select name="kelas" id="kelas" required >
<option value=""> - Pilih kelas - </option>
<option value="10"> 10 </option>
<option value="11"> 11 </option>
<option value="12"> 12 </option>
</select>
<p>Jurusan</p>
<input type="radio" name="jurusan" id="jurusan" value="PPLG" required> PPLG
<input type="radio" name="jurusan" id="jurusan" value="AKL" required> AKL
<p>
<input type="reset" value="Reset">
<input type="submit" value="Simpan">
</p>
</fieldset>
</form>
<?php
}
?>
Uji Coba
- Sekarang coba buka browser untuk mengakses
localhostsehingga muncul halaman index/ data siswa. - Klik Tambah Siswa, coba masukkan data baru dan klik Simpan
Memperbaharui Data (UPDATE)
- Ketikkan skrip berikut ke dalam file
edit.php. - Memang skrip untuk edit data terlihat lebih panjang, karena kita perlu mengambil data yang akan diedit, baru melakukan update data, jadi tidak sesederhana menambahkan data.
- Tapi yang penting coba pahami alur kerjanya.
<?php
include "config.php";
if(isset($_GET['id'])){
$id = $_GET['id'];
}else{
echo "<meta http-equiv='refresh' content='0, url=index.php'>";
}
if($_SERVER['REQUEST_METHOD']=="POST"){
$id = $_POST['id'];
$nama = $_POST['nama'];
$kelas = $_POST['kelas'];
$jurusan = $_POST['jurusan'];
$query = "UPDATE siswa SET ";
$query .= "nama = '$nama', ";
$query .= "kelas = '$kelas', ";
$query .= "jurusan = '$jurusan' ";
$query .= "WHERE id = '$id'";
$result = mysqli_query($koneksi,$query);
if(mysqli_affected_rows($koneksi)>0){
echo "Berhasil mengedit data siswa";
echo "<meta http-equiv='refresh' content='1, url=index.php'>";
}
}else{
// mengambil data
$query = "SELECT * FROM siswa WHERE id = '$id'";
$result = mysqli_query($koneksi,$query);
$data = mysqli_fetch_assoc($result);
?>
<form action="" method="post">
<fieldset style="width:20%">
<legend>Edit Siswa</legend>
<input type="hidden" name="id" value="<?=$data['id']?>">
<p>Nama Siswa</p>
<input type="text" name="nama" id="nama" value="<?=$data['nama']?>" required>
<p>Kelas</p>
<select name="kelas" id="kelas" required >
<option value=""> - Pilih kelas - </option>
<option value="10" <?php if($data['kelas']==10) echo "selected" ?> > 10 </option>
<option value="11" <?php if($data['kelas']==11) echo "selected" ?> > 11 </option>
<option value="12" <?php if($data['kelas']==12) echo "selected" ?> > 12 </option>
</select>
<p>Jurusan</p>
<?php
if($data['jurusan']=="PPLG"){
$pplg = " checked";
$akl = "";
}else{
$pplg = "";
$akl = " checked";
}
?>
<input type="radio" name="jurusan" id="jurusan" value="PPLG" <?=$pplg?> required> PPLG
<input type="radio" name="jurusan" id="jurusan" value="AKL" <?=$akl?> required> AKL
<p>
<input type="reset" value="Reset">
<input type="submit" value="Simpan">
</p>
</fieldset>
</form>
<?php
}
?>
Uji Coba
- Di halaman index/ data siswa, klik tombol Edit pada salah satu data
- Rubah data siswanya dan klik Simpan
Menghapus Data (DELETE)
- Bagian ini mungkin skrip yang paling sederhana di antara proses CRUD.
- Ketikkan skrip berikut ke dalam file
hapus.phpdan pahami alur kerjanya
<?php
include "config.php";
if(isset($_GET['id'])){
$id = $_GET['id'];
$query = "DELETE FROM siswa WHERE id = '$id'";
$result = mysqli_query($koneksi,$query);
if(mysqli_affected_rows($koneksi)>0){
echo "Berhasil menghapus siswa";
echo "<meta http-equiv='refresh' content='1, url=index.php'>";
}else{
echo "Gagal menghapus siswa";
echo "<meta http-equiv='refresh' content='1, url=hapus.php'>";
}
}else{
?>
<fieldset style="width:20%">
<legend>Hapus Siswa</legend>
<form action="">
<input type="number" name="id" id="id" required>
<input type="submit" value="Hapus">
</form>
</fieldset>
<?php
}
?>
Uji Coba
- Pada halaman index/ data siswa, klik Hapus pada salah satu datanya.
- Harusnya data terhapus dan anda akan dikembalikan ke halaman index.