2013-08-31 4 views
0

У меня есть переменная, которая является фильтром для моего запроса:Variable заявление MySQL в PHP

$filterString.=" AND venue = ".$venue; 

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

Мой запроса выглядит следующим образом (с неудачной попыткой):

mysql_query("SELECT * FROM event 
WHERE city = '$city' " . $filterString . " 
ORDER BY date ASC"); 
+0

Пожалуйста, не делайте этого (замену пользователем suplied данные непосредственно в запрос SQL). Вы разрешаете атаку SQL-инъекций. Вместо этого используйте «подготовленный оператор» (привязка данных заполнителей в запросе). –

+0

Даже если я использую mysql_real_escape_string? –

+1

@ David-SkyMesh ... Откуда вы знаете, что '$ city' и' $ venue' являются «пользовательскими данными» –

ответ

1

Я думаю venue потребности быть в одинарных кавычках:

$filterString.=" AND venue = '".$venue."."; 

Тем не менее, лучше использовать параметризованным запросов, а не встраивать запросы непосредственно в строку SQL.

+0

Вы можете связать дополнительный параметр, который контролирует (логически), действует ли инструкция AND. например: 'где city =? и ((не?) или место =?)) ' –

+0

было бы лучше, если бы вы показали @pedrum, как выполнить параметризованный запрос, а также логическое включение/исключение фильтра. –

+0

Это, похоже, не работает. –

0

Вы могли бы использовать:

$filterString .= !empty($venue) ? " AND venue = '$venue'" : ''; 

Заменитель любой тест, который вы хотите в самом начале, идея заключается в том, чтобы вернуть пустую строку, если место $ не относится к фильтру.

Чтобы ответить на другой вопрос свой комментарий:

WHERE 1 

является действительным условием, которое работает как Anything

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