Prepared statement PHP adalah teknik menjalankan query database dengan memisahkan perintah SQL dari data yang dimasukkan. Ini bukan sekadar praktik yang baik — ini adalah pertahanan utama melawan serangan SQL injection, salah satu celah keamanan paling berbahaya di aplikasi web.
Masalah yang Dipecahkan
Menggabungkan input pengguna langsung ke query, seperti "SELECT * FROM user WHERE nama = '$input'", sangat berbahaya. Penyerang bisa memasukkan kode SQL berbahaya melalui input tersebut. Prepared statement menutup celah ini sepenuhnya.
Cara Kerja Prepared Statement
Prosesnya terdiri dari tiga langkah: prepare (kirim template query dengan placeholder ?), bind (isi placeholder dengan data), dan execute (jalankan):
<?php
$stmt = $koneksi->prepare("SELECT * FROM pengguna WHERE email = ?");
$stmt->bind_param("s", $email);
$email = $_POST["email"];
$stmt->execute();
$hasil = $stmt->get_result();
$data = $hasil->fetch_assoc();
?>
Karena database menerima struktur query lebih dulu (dengan ?), lalu datanya secara terpisah, data tidak akan pernah dieksekusi sebagai perintah.
Tipe pada bind_param
| Huruf | Tipe Data |
|---|---|
s | String (teks) |
i | Integer (angka bulat) |
d | Double (desimal) |
b | Blob (data biner) |
Contoh bind_param("sid", $nama, $umur, $saldo) berarti string, integer, lalu double.
Prepared Statement di PDO
PDO menawarkan sintaks yang lebih ringkas:
<?php
$stmt = $pdo->prepare("SELECT * FROM pengguna WHERE email = ?");
$stmt->execute([$email]);
$data = $stmt->fetchAll();
?>
Kesimpulan
Jadikan prepared statement PHP kebiasaan untuk setiap query yang melibatkan input pengguna, baik itu SELECT, INSERT, UPDATE, maupun DELETE. Ini adalah langkah keamanan paling penting saat bekerja dengan database.
Referensi: untuk penjelasan lebih mendalam, kunjungi dokumentasi resmi PHP (php.net).

