Построение проблемы с запросами Coldfusion с помощью оператора LIKE - PullRequest
1 голос
/ 19 сентября 2010

Я пытаюсь построить динамический 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>

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

Спасибо

1 Ответ

6 голосов
/ 19 сентября 2010

Внутри 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>
...