Pernyataan yang disiapkan sangat berguna untuk mencegah injeksi MySQL.
Pernyataan yang telah disiapkan digunakan untuk mengeksekusi beberapa pernyataan SQL yang identik dengan lebih efisien.
Pernyataan yang disiapkan berfungsi sebagai berikut:
Prapemrosesan: Membuat templat pernyataan SQL dan mengirimkannya ke database. Nilai yang dicadangkan ditandai dengan parameter "?". Misalnya:
MASUKKAN KE Tamu Saya (nama depan, nama belakang, email) NILAI(?, ?, ?)
Penguraian basis data, kompilasi, optimalisasi kueri pada templat pernyataan SQL, dan penyimpanan hasil tanpa keluaran.
Eksekusi: Terakhir, nilai terikat aplikasi diteruskan ke parameter ("?" tanda), dan database mengeksekusi pernyataan tersebut. Aplikasi dapat mengeksekusi pernyataan beberapa kali jika nilai parameternya berbeda.
Dibandingkan dengan mengeksekusi pernyataan SQL secara langsung, pernyataan yang disiapkan memiliki dua keunggulan utama:
Pernyataan yang disiapkan sangat mengurangi waktu analisis, karena hanya satu kueri yang dibuat (walaupun pernyataan tersebut dieksekusi beberapa kali).
Parameter pengikatan mengurangi bandwidth server, Anda hanya perlu mengirimkan parameter kueri, bukan seluruh pernyataan.
Pernyataan yang disiapkan sangat berguna untuk injeksi SQL karena protokol yang berbeda digunakan setelah nilai parameter dikirim, memastikan validitas data.
Contoh berikut menggunakan pernyataan yang telah disiapkan di MySQLi dan mengikat parameter terkait:
Parsing setiap baris kode untuk contoh berikut:
"MASUKKAN KE Tamu Saya (nama depan, nama belakang, email) NILAI(?, ?, ?)"Dalam pernyataan SQL, kita menggunakan tanda tanya (?), di sini kita dapat mengganti tanda tanya dengan bilangan bulat, string, titik mengambang presisi ganda, dan nilai boolean.
Selanjutnya, mari kita lihat fungsi bind_param() :
$stmt->bind_param("sss", $nama depan, $nama belakang, $email);Fungsi ini mengikat parameter SQL dan memberi tahu database nilai parameternya. Kolom parameter "sss" menangani tipe data dari parameter lainnya. Karakter s memberi tahu database bahwa parameternya adalah string.
Ada empat jenis parameter:
i - bilangan bulat (tipe bilangan bulat)
d - ganda (tipe floating point presisi ganda)
s - tali
b - BLOB (objek besar biner: objek besar biner)
Setiap parameter memerlukan tipe tertentu.
Dengan memberi tahu database tipe data parameter, Anda dapat mengurangi risiko injeksi SQL.
Catatan: Jika ingin memasukkan data lain (input pengguna), validasi data tersebut sangat penting. |
Dalam contoh berikut, kami menggunakan pernyataan yang telah disiapkan dan parameter pengikatan di PDO: