2011-07-20 62 views
2

可能重複:
Coldfusion adding extra quotes when constructing database queries in stringsCFQUERY不逃逸單引號正確

所有,

我想使用一個getter插入過程中引用一個bean。 CF不會在'form.title'中的值中恰當地轉義單引號,因此我收到格式錯誤的sql錯誤。

任何想法?

這是代碼。

<cfscript> 
form.title = "page's are awesome"; 

page = new model.page.page(argumentCollection = form); 

<cfquery name="test" datasource="ksurvey"> 
insert into page(title) 
values('#page.getTitle()#') 
</cfquery> 

回答

14

如果你打算這樣做的,你需要preserveSingleQuotes()

INSERT INTO page(title) VALUES ('#preserveSingleQuotes(page.getTitle())#')

當然,插入你應該如何規範警告使用cfqueryparam來避免SQL注入攻擊。

INSERT INTO page(title) VALUES (<cfqueryparam value="#page.getTitle()#" cfsqltype="cf_sql_varchar" />)

參考:

+0

嘿查理,謝謝你的快速反應。 它似乎總是在發佈後不久就想出來的。我正在嘗試queryparam和保留單引號,並刷新我的應用程序,但沒有運氣。我想通過刷新而不是重新加載URL,doh! 標記你的答案,因爲它實際上是我的問題的答案:) 需要更多的咖啡! - 謝謝 – jason

3

我不會將任何值到數據庫中,而無需使用cfqueryparam,它不是安全!不僅如此,而且cfqueryparam會處理所有逃跑的事情。

<cfquery name="test" datasource="ksurvey"> 
    insert into 
     page(title) 
    values(<cfqueryparam value="#page.getTitle()#" cfsqltype="cf_sql_varchar">); 
</cfquery>