Anda sudah terlindungi dari injeksi sql, karena Anda menggunakan mysqli_stmt_bind_params yang akan keluar dengan benar untuk Anda.
Sunting. Anda dapat beralih ke beberapa kerangka kerja basis data untuk mendapatkan kode yang bersih dan indah.
Kalau tidak... ini spageti gaya lama... tapi aku menyukainya :D
Cukup mudah untuk memperluas kode Anda agar berfungsi dengan jumlah parameter yang tidak diketahui. Anda hanya perlu mengulang parameter Anda dan pada saat yang sama 1. buat string kueri Anda dengan notasi tanda tanya, dan tambahkan parameter Anda ke array, yang akan Anda teruskan ke maxdb_stmt_bind_param ( resource $stmt , string $types , array &$var ).
Jadi akan terlihat seperti ini. Ini mengasumsikan setidaknya SATU parameter yang ada (tapi sepele untuk menghindari ini).
$sql = "SELECT * FROM tbl_data WHERE ";
$and = '';
$types = '';
$parameters = array();
foreach($_POST as $k => $v) {
// check that $k is on your whitelist, if not, skip to the next item
$sql .= "$and $k = ?";
$and = " AND ";
$parameters[] = $v;
$types .= 's';
}
$stmt_query = mysqli_prepare($db, $sql);
mysqli_stmt_bind_params($stmt_query, $types, $parameters);