Parameterized Queries: Definisi, Fungsi, dan Keamanan Database

Definisi Parameterized Queries

Parameterized queries, atau sering disebut sebagai prepared statements, adalah teknik pemrograman yang digunakan untuk mengeksekusi perintah database dengan memisahkan kode SQL dari data input pengguna. Teknik ini merupakan standar industri dalam pengembangan aplikasi web untuk mencegah serangan SQL Injection, di mana penyerang mencoba menyisipkan perintah berbahaya ke dalam kueri database.

Dalam implementasi standar, kueri SQL dikirim ke server database dalam dua tahap: pertama, struktur kueri dikirim dan dikompilasi oleh database; kedua, data input dikirim sebagai parameter terpisah. Karena database sudah memiliki struktur kueri yang tetap, input pengguna tidak akan pernah dieksekusi sebagai perintah SQL, melainkan hanya diperlakukan sebagai data literal.

Mengapa Parameterized Queries Penting?

Keamanan data di sisi server sangat bergantung pada bagaimana aplikasi menangani input. Tanpa parameterisasi, aplikasi rentan terhadap manipulasi kueri. Berikut adalah tabel perbandingan antara kueri biasa dan parameterized queries:

FiturKueri Biasa (Dynamic)Parameterized Queries
KeamananRentan SQL InjectionKebal SQL Injection
PerformaKompilasi ulang setiap eksekusiKompilasi sekali, eksekusi berkali-kali
StrukturData menyatu dengan kodeData dipisah dari kode
PemeliharaanSulit dibacaLebih bersih dan terstruktur

Implementasi Teknis

Berikut adalah contoh perbandingan implementasi menggunakan bahasa pemrograman PHP dengan ekstensi PDO (PHP Data Objects):

Contoh Kueri Tidak Aman (Raw SQL)

$sql = "SELECT * FROM users WHERE username = '" . $_POST['user'] . "'";
$db->query($sql);

Contoh Parameterized Query (Aman)

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->execute(['username' => $_POST['user']]);
$user = $stmt->fetch();

Langkah-Langkah Implementasi

  1. Siapkan Template Kueri: Gunakan placeholder (seperti tanda tanya '?' atau nama parameter seperti ':id') di tempat data input seharusnya berada.
  2. Kirim ke Database: Kirim template tersebut ke server database untuk dipersiapkan (prepare).
  3. Bind Parameter: Masukkan nilai data yang sebenarnya ke dalam placeholder yang telah disiapkan.
  4. Eksekusi: Jalankan kueri yang sudah lengkap dengan data yang aman.

Keunggulan Performa

Selain aspek keamanan, parameterized queries meningkatkan efisiensi sistem. Ketika kueri yang sama dijalankan berulang kali dengan parameter yang berbeda, database tidak perlu melakukan proses parsing dan optimasi ulang. Database hanya perlu menggunakan rencana eksekusi yang sudah disimpan di memori (execution plan cache), yang secara signifikan mengurangi beban kerja server database.