2010-09-19 92 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