Intereting Posts
Внутреннее соединение Mysql на 2 столах не работает Пользовательский URL для каждого пользователя в PHP Как структурировать javascript при включении другого php-файла Использование переменных PHP внутри HTML-тегов? Как использовать сеанс внутри веб-страниц? Мой код mod_rewrite в htaccess заставил страницу не загружать Получение динамически созданного имени папки с использованием mkdir () в PHP Мне нужно установить ini_set ('default_charset', 'UTF-8') ;? Как я могу отправить электронную почту с помощью PHP в windows Azure? Конфигурация среды Laravel не загружается, сбой миграции – SQLSTATE Нет такого файла или каталога Предупреждение: fgetcsv () ожидает, что параметр 1 будет ресурсом, boolean задан в C: Как я могу определить, называется ли функция статическим в PHP? Создание глобальной переменной, доступной для каждой функции внутри класса Как сопоставить и использовать представление БД из Doctrine2 Что лучше использовать в PHP $ array = $ value или array_push ($ array, $ value)?

Построение SQL-запроса на основе флажков

Предположим, у меня есть форма, которая имеет 30 флажков, которые соответствуют музыкальным жанрам (он отправляется в обработчик формы PHP).

У меня есть таблица художников, в которой есть жанр. Каковы наилучшие методы построения запроса, который будет вести себя так:

Выберите имя FROM artist WHERE genreId = 1 OR genreId = 2 OR. , , и т. д., где genreId выбраны из флажков.

Я знаю, что могу динамически строить предложение WHERE в PHP, но у меня есть привычка использовать подготовленные заявления и хранимые процедуры. Что мне делать?

Solutions Collecting From Web of "Построение SQL-запроса на основе флажков"

Вы, скорее всего, захотите использовать IN() в своем предложении where следующим образом:

 WHERE genreId IN (1,2,3) 

К сожалению, действительно нет хорошего решения использовать это параметризованным способом. Вам просто нужно пойти в старую школу:

 $query = 'SELECT ... WHERE genreId IN (' . implode(',', $genreId_array) . ')'; 

Я полагаю, что вы могли бы сделать что-то подобное, чтобы построить параметризованный подход:

 $query = 'SELECT ... WHERE genreId IN ('; $array_length = count($genreId_array); for ($i = 0; $i < $array_length; $i++) { $query .= '?,'; } $query = rtrim(',',$query) . ')';