Bạn đã được bảo vệ chống lại việc tiêm sql, vì bạn đang sử dụng mysqli_stmt_bind_params sẽ thoát đúng cách cho bạn.
Chỉnh sửa. Bạn có thể chuyển sang một số khung cơ sở dữ liệu để có một mã rõ ràng và đẹp mắt.
Nếu không thì ... đây là kiểu mì spaghetti cũ quá ... nhưng tôi thích nó:D
Khá dễ dàng để mở rộng mã của bạn để hoạt động với một số lượng tham số không xác định. Bạn chỉ nên lặp lại các tham số của mình và đồng thời 1. xây dựng chuỗi truy vấn của bạn với ký hiệu dấu chấm hỏi và thêm các tham số của bạn vào một mảng mà bạn sẽ chuyển tới maxdb_stmt_bind_param (resource $ stmt, string $ type, array &$ var).
Vì vậy, nó sẽ giống như thế này. Nó giả định có ít nhất MỘT tham số ở đó (nhưng thật nhỏ để tránh điều này).
$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);