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 に答える