Coldfusion 對 query 語句生成
一般的 query 查詢方式
上面是純粹帶『查詢資料』進去 Query 語句時所使用的方式,SQL語句屬於固定類的,
但若你把它改成動態語句:
這個語句絕對會失敗的,
因為 Coldfusion 為了防止 SQL injection 所以會對 生成 SQL語句的變數裡 ' single-quotation 產生escape 字元,導致生成了不是你想像中的語句。
正確的作法,如果你希望使用動態語句生成,那就是加個指令要求ColdFusion不要去處理 single-quotation 問題即可解決:
<cfquery name="QryName" DataSource="ConnecttionName">
SELECT field-A,field-B
FROM TableName
WHERE strfield = '#sdata#'
AND numfield = #ndata#
AND dtmfield = #parseDatetime(dtdata)#
</cfquery>
上面是純粹帶『查詢資料』進去 Query 語句時所使用的方式,SQL語句屬於固定類的,
但若你把它改成動態語句:
<cfset qs = "strfield = '#sdata#' AND numfield = #ndata# AND dtmfield = #parseDatetime(dtdata)#">
<cfquery name="QryName" DataSource="ConnecttionName">
SELECT field-A,field-B
FROM TableName
WHERE #qs#
</cfquery>
這個語句絕對會失敗的,
因為 Coldfusion 為了防止 SQL injection 所以會對 生成 SQL語句的變數裡 ' single-quotation 產生escape 字元,導致生成了不是你想像中的語句。
正確的作法,如果你希望使用動態語句生成,那就是加個指令要求ColdFusion不要去處理 single-quotation 問題即可解決:
<cfset qs = "strfield = '#sdata#' AND numfield = #ndata# AND dtmfield = #parseDatetime(dtdata)#">
<cfquery name="QryName" DataSource="ConnecttionName">
SELECT field-A,field-B
FROM TableName
WHERE #PreserveSingleQuotes(qs)#
</cfquery>
留言