Vấn đề ở đây (và với câu trả lời khác) là in
mệnh đề được bao quanh bởi dấu ngoặc kép, vì vậy điều đó sẽ không mang lại kết quả mà chúng ta muốn. Chúng ta cần chuyển một mảng vào truy vấn một cách hiệu quả. Ngoài ra mã của bạn dễ bị tiêm sql . Tôi thực sự đề nghị chuyển sang PDO / các tuyên bố chuẩn bị. Tôi đã thêm một chút bảo vệ các quốc gia, nhưng điều đó không phải là dễ dàng bằng bất kỳ phương tiện nào.
function prepareForSql($value, $key) {
return addslashes($value);
}
array_walk($_POST["chkUnr"], "prepareForSql");
$search_country = "'" . implode("','", $_POST["chkUnr"]) . "'";
$query = "";
$query .= "SELECT users.* FROM users";
if (isset($_POST['singles_online']) ? $_POST['singles_online'] : 0 == 1) {
$query .= " LEFT JOIN online ON online.user_id = users.id";
}
$query .= " WHERE";
if (isset($_POST['vip']) ? $_POST['vip'] : 0 == 1) {
$query .= " users.vip = 1 AND";
}
if (isset($_POST['profile_image']) ? $_POST['profile_image'] : 0 == 2) {
$query .= " users.profile_image = '2' AND";
}
if (isset($_POST['singles_online']) ? $_POST['singles_online'] : 0 == 1) {
$query .= " online.is_online = 1 AND";
}
$query .= " (id NOT IN (SELECT user_id FROM users_blocked WHERE blocked_id = '$user_id')) AND";
$query .= " (users.user_age >= '$age_from' AND users.user_age <= '$age_to') AND";
$query .= " (users.gender = '$gender_search') AND";
$query .= " users.country IN ($search_country)";
$search_query = mysql_query($query);