使用LIKE语句构建coldfusion查询问题

Ros*_*oeh 1 mysql coldfusion cfquery sql-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>
Run Code Online (Sandbox Code Playgroud)

似乎like子句有问题.有任何想法吗?我是否需要逃避%?

谢谢

And*_*aus 6

在CFQUERY中,ColdFusion将#SQL#自动用双引号替换单引号.

所以在理论上你必须像这样编写你的查询:

<cfquery name="results" >
#PreserveSingleQuotes(SQL)#
</cfquery>
Run Code Online (Sandbox Code Playgroud)

但是......接受表单变量并在查询中直接使用它而不进行进一步验证是非常危险的.看起来像是对我的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>
Run Code Online (Sandbox Code Playgroud)

  • 此外,如果您需要动态构建查询并运行CF9,则可以使用查询功能.http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSe9cbe5cf462523a0693d5dae123bcd28f6d-7ffb.html使用此方法,您可以在查询中插入问号来代替变量,并使用addParam方法. (2认同)