2013-07-03 2 views
0

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

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

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

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

ответ

2

Вы, вероятно, хотите использовать IN() в вашем где предложение вроде этого:

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) . ')'; 
+0

Убедитесь, что вы признаете, что пользователь может отправить форму без выбора любые флажки. –

+0

@Galway Конечно, проверка должна быть выполнена до того, как вы даже попытаетесь сформировать запрос. –

+0

@MikeBrant Хорошо. Спасибо, джентльмены. Слишком плохо, что с точки зрения передового опыта мало. Никогда не больно спрашивать. – Galway

Смежные вопросы