Mencoba Prepared Statements MySQLi


Prepared Statemenst ini merupakan salah satu fitur dari MySQLi yang tidak terdapat pada MySQL extension.  Selain pada PHP MySQLi extension, fitur ini juga mendukung PDO (PHP Data Objects), kemudian teknik ini juga sangat umum digunakan pada lingkungan framework PHP, maka dari itu saya merasa bahwa hal ini sangat penting untuk perlu Saya ketahui dan coba.

Apa itu Prepared Statements MySQL ?

Prepared Statements MySQL merupakan sebuah fitur yang disediakan oleh MySQL (dan beberapa jenis aplikasi database lainnya). Dengan menggunakan Prepared Statements ini seorang programmer bisa mengirim query ke database server secara terpisah, maksudnya terpisah perintah query yang dikirim dengan “data” query. Sehingga hal tersebut akan membuat query yang dikirim ke database server jadi lebih aman dan cepat.

Alur Prepared Statement 

#1 Pertama
Sebagai gambaran saja, jika Anda melakukan query menggunakan mysqli_query(); maka query atau data yang dikirim akan dimasukan kedalam satu perintah didalam string, seperti berikut ini
$data=mysqli_query(“SELECT * FROM nama_tabel where id=1”)

Namun jika Anda menggunakan prepared statements, maka data yang dicari atau diinput akan diganti menggunakan “?” seperti contoh berikut :

“SELECT * FROM nama_tabel where id=?”

atau jika untuk input data

“INSERT INTO nama_tabel VALUES (?,?,?)”

Query diatas sebenarnya secara teknis juga dikirim langsung ke database server. Namun oleh MySQL perintah tersebut disimpan sementara waktu sampai ada proses yang disebut dengan “BIND”

#2 Kedua
BIND merupakan proses kedua setelah query dilakukan, dimana nantinya akan ada sebuah proses pengiriman data yang sebelumnya telah di tandai dalam sebuah proses prepare pada query yang menggunakan tanda ‘?’ . Data yang dikirim sesuai dengan proses prepare yang telah ditandai, jika misal hanya satu data yang dibutuhkan, maka yang dikirimnya pun satu data saja, jika dua data maka yang dikirimnya dua data, beitu seterusnya.

#3 Ketiga
Setelah melakukan proses prepare dan bind maka langkah selanjutnya adalah melakukan eksekusi menggunakan perintah execute()

Keuntungan Prepared Statements

Seperti yang sudah saya jelaskan sebelumnya bahwa penggunaan prepared statements ini tentu akan membuat query yang dikirim jadi lebih aman dan cepat. Karena seperti yang kita ketahui bahwasanya, request yang dilakukan dalam sebuah aplikasi berasal dari user, jika misal ada user yang sengaja melakukan penambahan kode query (SQL)  tertentu saat melakukan request ke database server maka tentu ini akan jadi bermasalah. Teknik biasanya dikenal sebagai teknik SQL Injection.

Karena dalam mysql prepared statements ini kita bisa memisahkan antara query dengan datanya maka tentu kita bisa terhindar dari penyisipan kode SQL tersebut.

Contoh Penggunaan MySQLi Prepared Statements


Disini Saya akan memeberikan contoh pengunaan MySQLi Prepared statements untuk menampilkan data dalam tabel hutangku. Teknik penulisan kode yang akan saya contohkan adalah menggunakan PHP MySQLi Procedural

<?php
//buat koneksi
$koneksi = new mysqli('localhost','root','','crudmysqli');
//cek koneksi
if(!$koneksi){
 die('Gagal melakukan koneksi'.mysqli_connect_errno($koneksi).'-'.mysqli_connect_error($koneksi));
}
//simpan query
$perintah=mysqli_prepare($koneksi,"SELECT * FROM hutangku where namahutang=?");

//jika gagal tampilkan error
if(!$perintah){
 die('Gagal melakukukan query='.mysqli_errno($koneksi).'-'.mysqli_error($koneksi));
}
$namahutang="Bensin";
//jalankan di param
mysqli_stmt_bind_param($perintah, "s", $namahutang);
//eksekusi perintah
mysqli_stmt_execute($perintah);
//tampilkan data
$result=mysqli_stmt_get_result($perintah);
while($row=mysqli_fetch_row($result)){
 echo "$row[0] $row[1] $row[2]";
}
//tutup statemen dan koneksi
mysqli_stmt_close($perintah);
mysqli_close($koneksi);
?>

Bila di eksekusi dijalankan di browser akan menampilkan data seperti berikut ini

prepared statements

Untuk penjelasan kode secara mendetailnya akan saya bahasa pada artikel Cara Menampilkan Data Menggunakan PHP MySQLi Prepared



1 Response to "Mencoba Prepared Statements MySQLi"

Silahkan untuk meninggalkan komentar, santai saja dan mulailah berkomentar...