Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Pemrograman Web Aman: Input, Query, dan Hak Akses

Pelajaran 5 dari 14

Query berparameter

Pencarian LIKE dengan ESCAPE dan daftar IN dinamis

Setelah pelajaran ini kamu bisa menulis pencarian sebagian yang memperlakukan % dan _ sebagai huruf biasa, dan query IN yang jumlah placeholdernya mengikuti panjang daftar.

±13 menitDiperiksa 7 Okt 2026

Materi

Pencarian "mengandung kata" memakai LIKE dengan pola %kata%. Polanya disusun di Python lalu dikirim sebagai parameter, jadi tidak ada injeksi. Masalahnya lain: di dalam pola, % berarti nol atau lebih karakter apa saja dan _ berarti tepat satu karakter. Pengguna yang mencari 50% juga mendapat Gula aren 500 gram, dan pencarian Kode_A ikut menemukan KodeXA. Dokumentasi SQLite menyediakan klausa ESCAPE: karakter yang ditunjuknya membuat % atau _ sesudahnya dibaca sebagai huruf biasa. Escape karakter pelolosnya sendiri dulu, baru % dan _. LIKE di SQLite juga tidak membedakan huruf besar-kecil untuk huruf ASCII.

Daftar IN punya kebutuhan berbeda: banyaknya nilai baru diketahui saat program berjalan. Teks placeholder-nya dirakit dari PANJANG daftar, misalnya ", ".join("?" * len(ids)), sedangkan nilainya tetap dikirim lewat parameter. Yang dirakit hanya deretan tanda tanya buatan programmer, bukan nilai dari pengguna. Daftar kosong ditangani sebelum query dibuat.

kata = "100%"                         # dari kotak pencarian
aman = kata.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_")
conn.execute("SELECT judul FROM artikel WHERE judul LIKE ? ESCAPE '\\'", (f"%{aman}%",))

ids = [4, 9, 12]
tanda = ", ".join("?" * len(ids))     # "?, ?, ?"
conn.execute(f"SELECT judul FROM artikel WHERE id IN ({tanda})", ids)

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Query pencarian berikut sudah berparameter, tetapi % di kata belum di-escape. Pengguna mengetik 100%. Nama barang mana yang ikut ditemukan?

sql = "SELECT nama FROM barang WHERE nama LIKE ?"
conn.execute(sql, (f"%{kata}%",))
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke