1

我正在尝试使用此行构建动态 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子句有问题。有任何想法吗?我需要逃避 % 吗?

谢谢

4

1 回答 1

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>
于 2010-09-19T13:26:59.023 回答