Fitur pencarian membantu pengguna menemukan data dengan cepat di antara ratusan baris. Artikel ini membahas cara membuat fitur pencarian dan filter data dengan PHP dan MySQL secara aman.
Langkah 1: Form Pencarian
Buat form sederhana yang mengirim kata kunci lewat metode GET (agar bisa di-bookmark):
<form method="get">
<input type="text" name="cari" placeholder="Cari produk..."
value="<?= htmlspecialchars($_GET['cari'] ?? '') ?>">
<button type="submit">Cari</button>
</form>
Langkah 2: Query Pencarian dengan LIKE
Gunakan LIKE dengan % agar cocok sebagian kata, dan prepared statement agar aman dari SQL injection:
<?php
require "koneksi.php";
$cari = trim($_GET["cari"] ?? "");
$keyword = "%" . $cari . "%";
$stmt = $koneksi->prepare("SELECT * FROM produk WHERE nama LIKE ? ORDER BY nama");
$stmt->bind_param("s", $keyword);
$stmt->execute();
$hasil = $stmt->get_result();
while ($row = $hasil->fetch_assoc()) {
echo htmlspecialchars($row["nama"]) . "<br>";
}
?>
Tanda % berarti “karakter apa saja”, sehingga mencari “kop” akan menemukan “Kopi” dan “Kopiah”.
Langkah 3: Menambahkan Filter Kategori
Filter memungkinkan mempersempit hasil. Bangun query secara dinamis dengan aman:
<?php
$cari = trim($_GET["cari"] ?? "");
$kategori = $_GET["kategori"] ?? "";
$sql = "SELECT * FROM produk WHERE nama LIKE ?";
$params = ["%$cari%"];
$tipe = "s";
if ($kategori !== "") {
$sql .= " AND kategori_id = ?";
$params[] = (int) $kategori;
$tipe .= "i";
}
$stmt = $koneksi->prepare($sql);
$stmt->bind_param($tipe, ...$params);
$stmt->execute();
$hasil = $stmt->get_result();
?>
Teknik “bangun query + array parameter” ini membuat filter fleksibel namun tetap aman lewat prepared statement.
Langkah 4: Menggabung dengan Pagination
Untuk hasil pencarian yang banyak, gabungkan dengan pagination. Kuncinya: sertakan parameter cari pada tautan halaman agar pencarian tidak hilang saat pindah halaman:
<a href="?cari=<?= urlencode($cari) ?>&hal=2">Halaman 2</a>
Kesalahan Umum
- Menyisipkan
$_GETlangsung ke query — rawan SQL injection. Selalu prepared statement, bahkan untuk pencarian. - Pencarian hilang saat pindah halaman — sertakan kata kunci di URL pagination.
- Lupa
htmlspecialchars()pada value input dan hasil.
Kesimpulan
Anda telah membuat fitur pencarian dan filter data PHP dan MySQL yang aman memakai LIKE dan prepared statement, serta filter kategori dinamis. Fitur ini wajib untuk aplikasi dengan banyak data agar pengguna nyaman. Kombinasikan dengan pagination untuk hasil yang rapi.
Referensi: untuk pendalaman, kunjungi dokumentasi resmi PHP (php.net).

