我正在尝试使用此行构建动态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子句存在问题。有任何想法吗?我是否需要逃避%?
由于
答案 0 :(得分:6)
在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>