Реализация запроса к базе данных с множественным условием where

Рейтинг: 0Ответов: 1Опубликовано: 08.05.2023

Подскажите, пожалуйста, как правильно реализовать запрос к БД через PHP?

Допустим, имеется БД planets, и в ней столбцы такого типа:

  • name: земля, меркурий, венера...
  • размер: big, small, large
  • температура: hot, cold

Все эти данные приходят с формы, и запрос:

Select * from Planet where размер = 'big' AND темепратура = 'hot'

Но, бывает такое, что в форме пропускают один из параметров намерено, дабы получить результат только по одному критерию:

Select * from Planet where размер = 'big' AND темепратура = ''

А если таких критериев (столбцов) будет больше, то как это реализовать на PHP?

if ($_POST['size'] = '') {
  $sql = "Select * from planet where температура = $_POST['temperatura']";
} else {
  "Select * from planet where размер = 'big' AND температура = $_POST['temperatura']"
}

Ответы

▲ 1

Суть примера кода ниже в том, чтобы показать, что такую задачу можно решить, собирая SQL-запрос согласно данным, которые поступают на сервер.

$sql = 'SELECT * FROM `planet` WHERE 1'; //Объявляем переменную, содержащую по умолчанию строку с SQL-запросом, выбирающим все строки из таблицы (не БД, а таблицы) planet
$whereAND = ''; //Объявляем пустую строку, содержащую дополнительные условия AND для SQL-запроса.

//Если пользователь указал, что хочет выбрать планеты по размеру (если в массиве $_POST содержится элемент с ключом size)
if (isset($_POST['size'])) {
    $whereAND .= ' AND `size` = ' . $_POST['size']; //Добавляем в строку дополнительных условий условие выборки по размеру планеты
}

if (isset($_POST['temperature'])) {
    $whereAND .= ' AND `temperature` = ' . $_POST['temperature'];
}
//и т.д.

$sql .= $sql . $whereAND;

P.S. Много if или же switch - выбирать Вам. Также стоит задуматься о безопасности SQL-запросов (не уверен, что у вас реальный проект, но безопасности место всегда найдётся).