BLOG

Fungsi dan Pengertian Penggunaan Prepared Statements mysqli

シックス , BLOG
0
2163

Salah satu fitur baru yang tersedia di dalam mysqli extension yang tidak ada pada mysql extension adalah dukungan untuk prepared statements MySQL. Dalam tutorial belajar PHP MySQL kali ini kita akan membahas tentang pengertian prepared statements dan cara penggunaan prepared statements dengan mysqli.


PHP mendukung fitur prepared statements pada mysqli extension dan PDO. Fitur ini juga umum digunakan di dalam pemrograman PHP lanjutan seperti framework PHP. Karena hal ini, penting juga bagi kita untuk memahami cara penggunaannya.

Pengertian Prepared Statements MySQL

Prepared statements adalah sebuah fitur yang disediakan MySQL (dan juga beberapa aplikasi database lainnya), dimana kita bisa mengirim query (perintah) secara terpisah antara query inti dengan “data” dari query. Tujuannya, agar query menjadi lebih aman dan cepat (jika perintah yang sama akan digunakan beberapa kali).

Sebagai perbandingan, untuk menampilkan data MySQL menggunakan fungsi mysqli_query(), kita membuat seluruh query dalam 1 string dan langsung mengirimkannya ke MySQL Server, sebagai berikut:

$result=mysqli_query("SELECT * FROM mahasiswa_ilkom WHERE 
nama='Neil Situmorang'");

Dengan prepared statements, query tersebut akan dipisah antara perintah query: “SELECT…” dengan ‘data’-nya yakni “Neil Situmorang”.


Proses Pembuatan Prepared Statement MySQL

Proses pembuatan prepared statements membutuhkan 3 langkah: Prepared, Bind, dan Execute.

Pada proses pertama: prepared, kita mempersiapkan query yang akan dijalankan, tetapi tanpa ‘data’. Bagian dimana ‘data’ berada digantikan dengan tanda tanya (?), seperti berikut ini:

SELECT * FROM mahasiswa_ilkom WHERE nama=?

atau

INSERT INTO mahasiswa_ilkom VALUES (?, ?, ?, ?, ?)

Secara teknis, query diatas akan langsung di kirim PHP ke MySQL Server. Di dalam MySQL, perintah tersebut disimpan untuk sementara menunggu proses berikutnya: bind.

Proses kedua adalah bind. Dalam tahap ini, kita akan mengirimkan data yang telah ditandai dalam proses prepare. Data disini adalah bagian yang diberi tanda “?”. Jika di dalam proses prepare hanya butuh 1 data, kita mengirimkan 1 data. Tetapi jika kita butuh 5 data, kita mengirimkan 5 data (sesuai dengan query yang ditulis dalam tahap prepare).

Setelah proses prepare dan bind, berikutnya adalah menjalankan prepared statement (execute).


Kenapa Harus Menggunakan Prepared Statements?

Keuntungan terbesar dari penggunaan prepared statements adalah dalam hal keamanan. Untuk aplikasi ‘nyata’, bagian “data” dari suatu query biasanya berasal dari user. Seorang user yang jahil bisa saja menambahkan perintah SQL pada kotak inputan user name. Metoda ini dikenal juga dengan SQL Injection.

Dengan memisahkan perintah query dengan datanya, kita bisa mencegah penyisipan query.


Cara Penggunaan Prepared Statements mysqli

Pembahasan mengenai prepared statements cukup panjang dan akan saya bahas secara bertahap dalam 2 tutorial berikutnya. Sebagai gambaran, berikut adalah contoh kode program untuk menampilkan data mahasiswa dari tabel mahasiswa_ilkom menggunakan prepared statement mysqli (procedural style). Penjelasan mengenai kode program ini akan kita bahas lengkap pada tutorial berikutnya:

<?php
// buat koneksi dengan MySQL, gunakan database: universitas
$link = mysqli_connect('localhost', 'root', '', 'universitas');
// cek koneksi
if (!$link) {
    die('Koneksi Error : '.mysqli_connect_errno().
    ' - '.mysqli_connect_error());
}
// buat prepared statements
$stmt = mysqli_prepare($link, "SELECT * FROM mahasiswa_ilkom WHERE nama=?");
// siapkan "data" query
$nama_mhs="Neil Situmorang";
// hubungkan "data" dengan prepared statements: bind
mysqli_stmt_bind_param($stmt, "s", $nama_mhs);
// jalankan query: execute
mysqli_stmt_execute($stmt);
// cek hasil query
if (!$stmt) {
    die('Query Error : '.mysqli_errno($link).
    ' - '.mysqli_error($link));
}
// ambil hasil query
$result=mysqli_stmt_get_result($stmt);
// tampilkan hasil query
while ($row= mysqli_fetch_row($result)) {
    echo "$row[0] $row[1] $row[2] $row[3] $row[4]";    
    echo "<br />"; 
    } 
// tutup statements
mysqli_stmt_close($stmt);
// tutup koneksi
mysqli_close($link);
?>

Jika kode program diatas dijalankan, hasilnya adalah sebagai berikut:

99145055 Neil Situmorang 22 Medan 1.90

0 Comments

×