Intereting Posts
Как получить количество строк с SplFileObject? mySQL Group по имени участника Как сервер может проверять запросы ajax не с сайта, X-Requested-With Получить все дочерние, внуки и т. Д. Узлы под родителями, используя php с результатами запроса mysql Минимальная цена заказа Opencart Сценарий для изменения всех таблиц и полей для сортировки utf-8-bin в MYSQL Изменено PDO :: ATTR_EMULATE_PREPARES на FALSE и появляется ошибка «Недопустимый номер параметра» Простой поиск и замена регулярных выражений в php для минимизации / сжатия javascript? php обновить текущую страницу? Класс подключения / отключения базы данных OOP simplexml получает значение узла без typecasting Как добавить запятые к номерам в PHP WordPress url rewriting – хороший URL с именем от SugarCRM Регулярное выражение регулярного выражения для проверки ввода: два слова с пробелом между Почему count (DOMNode-> childNodes) возвращает неверное количество детей? (PHP и XML)

Создание динамического запроса mysql с использованием переменных php

У меня есть таблица html, которая загружает все в таблице базы данных mySQL. У меня есть выпадающие списки, относящиеся к столбцам этой таблицы mySQL – когда пользователь выбирает одно из выпадающих списков, которое он использует AJAX для запроса базы данных.

Мне нужно выяснить, как построить запрос динамически, потому что иногда выпадающие списки будут пустыми (т.е. они не хотят фильтровать этот столбец).

Каков наилучший способ сделать это?

В настоящее время у меня есть что-то вроде этого:

$stationFilter = $_GET['station']; $verticalFilter = $_GET['vertical']; $creativeFilter = $_GET['creative']; $weekFilter = $_GET['week']; $result = mysql_query("SELECT * FROM $tableName WHERE STATION_NETWORK = '$stationFilter' AND VERTICAL = '$verticalFilter' AND CREATIVE = '$creativeFilter' AND WK = '$weekFilter'"); $data = array(); while ($row = mysql_fetch_row($result) ) { $data[] = $row; } $finalarray['rowdata'] = $data; 

То, что вы можете себе представить, не работает, потому что, если какое-либо из этих полей пуст – запрос терпит неудачу (или ничего не возвращает).

Очевидно, что создание такого «статического» запроса, как это, действительно затрудняет, если определенные переменные пусты.

Каков наилучший способ динамического создания этого запроса, чтобы он включал только те, которые не были пустыми, добавляется в запрос, чтобы он мог успешно завершить и отобразить соответствующие данные?

Просто проверьте, содержат ли переменные значение, и если это так, создайте запрос следующим образом:

 unset($sql); if ($stationFilter) { $sql[] = " STATION_NETWORK = '$stationFilter' "; } if ($verticalFilter) { $sql[] = " VERTICAL = '$verticalFilter' "; } $query = "SELECT * FROM $tableName"; if (!empty($sql)) { $query .= ' WHERE ' . implode(' AND ', $sql); } echo $query; // mysql_query($query); с unset($sql); if ($stationFilter) { $sql[] = " STATION_NETWORK = '$stationFilter' "; } if ($verticalFilter) { $sql[] = " VERTICAL = '$verticalFilter' "; } $query = "SELECT * FROM $tableName"; if (!empty($sql)) { $query .= ' WHERE ' . implode(' AND ', $sql); } echo $query; // mysql_query($query); 
 $filter = array(); if ($_GET['station'] != '') { $filter[] = 'STATION_NETWORK = '.$_GET['station'];} if ($_GET['vertical'] != '') { $filter[] = 'VERTICAL = '.$_GET['vertical'];} if ($_GET['creative'] != '') { $filter[] = 'CREATIVE = '.$_GET['creative'];} if ($_GET['week'] != '') { $filter[] = 'WK = '.$_GET['week'];} $query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $filter); $result = mysql_query($query); ... 

но лучше, если в GET вы нажали имя строк в таблице; $ _GET ['STATION_NETWORK'] — некоторые вроде этого;

 then you make foreach ($_GET as $key => $value) { if ($value != '') { $filter[] = $key.' = '.$value;} } 

или попробуйте

 $filter = array('STANTION_NETWORK' => $_GET['station'], 'VERTICAL' => $_GET['vertical'], 'CREATIVE' => $_GET['creative'], 'WK' => $_GET['week']); $query_array = array(); foreach ($filter as $key => $value) { if ($value != '') { $query_array[] = $key.' = '.$value;} } $query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $query_array); $result = mysql_query($query);