Intereting Posts
Выбор SQL из двух таблиц возвращает повторяющиеся значения – Codeigniter Агент пользователя, извлечение ОС и браузера из строки Является ли добавление PHP уязвимым для SQL-инъекции? Отправка нескольких уведомлений о переносе iphone + APNS + PHP + Tutorial Вставить автоматически увеличивающийся идентификатор с помощью подготовленных операторов Включение микросекунд в Symfony2 (Doctrine) и MySQL PHP не может создать каталог с mkdir PHP: невозможно присвоить значение переменной переменной Как я могу сделать кнопку отправки формы также перенаправлять на конкретный div на странице? Устанавливать масштабирование по умолчанию для веб-страницы программно? Как предотвратить дублирование сообщений через обновление браузера? Не найдено ни одного маршрута для «GET /» Symfony при входе в систему PayPal IPN не обновляет базу данных MySQL json parsing in ios + php Функция PHP – hash_pbkdf2

Построение SQL-запроса по необязательным параметрам поиска

Я пытаюсь построить запрос MySQL вокруг некоторых необязательных параметров поиска в PHP. В моей базе данных есть три поля поиска, связанные с тремя столбцами. Пользователь должен иметь возможность искать каждый столбец отдельно или до всех 3, если они хотят сузить результаты.

Мой PHP-код построен так, что если одно из полей поиска пустое, это не имеет значения, и он продолжит поиск в двух других полях. Тем не менее, я изо всех сил пытаюсь понять, как построить мой SQL-запрос после того, как предложения where которые уже указаны в массиве $whereclauses . Я возвращаю те же столбцы в любом поиске, который пользователь делает, чтобы сделать запрос SQL довольно простым и означать, что он должен быть определен только один раз.

Мой PHP-код :

 <?php require '../db/connect.php'; $whereclauses = array(); $subsets = false; // for every field if(!empty($_POST['name'])) { $subsets = true; $whereclauses[] = " ARTIST = ". mysql_real_escape_string(trim($_POST['name'])); } if($subsets) { $whereclauses = implode(", ". $whereclauses); } else { $whereclauses =""; } 

SQL-запрос в PHP

  if(!empty($whereclauses)) { $sql = "SELECT `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION` FROM `table 3`"; }; $result = mysql_query($sql); $data = array(); while ($array = mysql_fetch_assoc($result)) { $data[] = $array; } header('Content-type: application/json'); echo json_encode($data); 

Как добавить массив $whereclauses в свой $sql запрос?

Solutions Collecting From Web of "Построение SQL-запроса по необязательным параметрам поиска"

 <?php require '../db/connect.php'; $whereclauses = array("where 1=1"); $subsets = false; // for every field if(!empty($_POST['name'])) { $subsets = true; $whereclauses[] = " ARTIST = '". mysql_real_escape_string(trim($_POST['name']))."'"; } 

Просто взорвите массив в sql

 $sql = "SELECT `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION` FROM `table 3` ".implode(" AND ",$whereclauses); 
  if(!empty($whereclauses)) { $sql = "SELECT `ARTIST`, `TRACKTITLE`, `DATE`, `LOCATION` FROM `table 3`"; $sql.= " WHERE 1=1 "; foreach($whereclauses as $where){ $sql.= " AND ".$where; } } $result = mysql_query($sql); $data = array(); while ($array = mysql_fetch_assoc($result)) { $data[] = $array; } header('Content-type: application/json'); echo json_encode($data);