Создание проблемы запроса coldfusion с оператором LIKE

Я пытаюсь создать динамический оператор sql с этой строкой

<cfset SQL = "SELECT url, MONTH(event_date) AS months, YEAR(event_date) AS year, event_date, title from events where title LIKE '%#form.event_name#%' ">

<cfquery name="results" >
#SQL#
</cfquery>

Кажется, есть проблема с подобным предложением. Есть идеи? Нужно ли мне избегать%?

Спасибо


person Roscoeh    schedule 19.09.2010    source источник


Ответы (1)


В CFQUERY ColdFusion автоматически заменит одинарные кавычки в #SQL# двойными кавычками.

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

<cfquery name="results" >
#PreserveSingleQuotes(SQL)#
</cfquery>

НО... Очень опасно принимать переменную формы и использовать ее без дальнейшей проверки непосредственно в вашем запросе. Мне это кажется приглашением к атакам SQL-инъекций.

Я бы предпочел использовать <cfqueryparam> так:

<cfquery name="results" >
SELECT url, MONTH(event_date) AS months, YEAR(event_date) AS year, event_date, title 
from events 
where title LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#form.event_name#%"> 
</cfquery>
person Andreas Schuldhaus    schedule 19.09.2010
comment
Кроме того, если вам нужно построить запрос динамически и вы используете CF9, вы можете использовать функцию запроса. help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/ Используя это, вы можете вставить вопросительный знак в запрос вместо своей переменной и использовать метод addParam. - person Tyler Clendenin; 19.09.2010