Как сделать запрос в базу данных чтобы по условию WHERE выводились любые значения столбцов по некоторым переменным?
Я сформировал запрос в базу данных
$dta = "SELECT * FROM shiny_name WHERE Ширина = '".$data['Ширина']."' AND Профиль = '".$data['Профиль']."' AND Диаметр = '".$data['Диаметр']."' AND Бренд = '".$data['Бренд']."' AND Авто = '".$data['Авто']."' " ;
мне нужно чтобы по некоторым значениям переменных выводились любые значения. т.е. как сделать чтобы например Ширина = 'любые' а остальные переменные имели определенные значения. Можно так сделать на php ? или сделать так чтобы некоторые переменные не участвовали в поиске хотя были в запросе.
Ответы (1 шт):
В самом простом варианте тупо не добавлять условие, если оно не нужно. Например
$params = [];
$sql = "SELECT * FROM shiny_name WHERE 1";
if ($data['Ширина'] !== "любые")
$sql .= " AND Ширина = ?";
$params[] = $data['Ширина'];
}
И так далее. И потом
$stmt = $db->prepare($sql);
$stmt->execute($params);
Но в принципе можно все сделать и прямо в запросе, чтобы "по условию WHERE выводились либо любые значения, либо выполнялось условие" если переформулировать корявый заголовок вопроса.
Можно написать двойное условие, которое будет возвращать все строки, если значение равно null, или искать по нему, если не равно. Для этого значение надо передавать в запрос два раза, вида
(значение is null OR условие)
При этом запросы должны быть параметризованные, а не вот это вот всё.
Например
$name = !empty($_GET['name']) ? "%".$_GET['name']."%" : null;
$car = !empty($_GET['car']) ? $_GET['car'] : null;
$sql = "SELECT * FROM users
WHERE (? is null or name LIKE ?)
AND (? is null or car=?)";
$stmt = $db->prepare($sql);
$stmt->execute([$name, $name, $car, $car]);
foreach ($stmt as $row) {
// печатаем результат
}