2010-09-19 89 views
1

我想建立一个动态SQL语句与这一行建立一个ColdFusion的查询问题与LIKE语句

<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> 

似乎还有与同类条款的问题。有任何想法吗?我需要逃避%吗?

感谢

回答

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> 
+2

另外,如果你需要动态地构建查询并运行CF9,您可以使用查询功能。 http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSe9cbe5cf462523a0693d5dae123bcd28f6d-7ffb.html使用此功能,您可以在查询中插入问号来代替变量,并使用addParam方法。 – 2010-09-19 18:31:52

+0

谢谢你指出这一点! – 2010-09-20 04:43:14