2009-08-21 64 views
0

我正在編寫一個子系統,可能會將表格從項目重命名爲項目。DAO.cfc中的動態表名?

而不是要求我的子系統的用戶搜索&使用它之前替換,這是否工作?

<cfquery name="local.foo" datasource="#dsn#"> 
    SELECT col1, col2, col3 
    FROM #tableName# 
</cfquery> 

沒有<cfqueryparam>,它會變成不可緩存嗎?或任何其他問題? (假設SQL注入不是問題)

我不認爲我可以使用<cfqueryparam>表名,對不對?

謝謝。

+1

「做這個工作嗎?」你爲什麼不試試呢? 「我不認爲我可以使用表名,對吧?」再次.. – erikvold 2011-03-31 21:39:29

+0

*使用表名*我知道這是一箇舊線程,但對於將來遇到它的任何人,答案是否定的。 Cfqueryparam或綁定變量只能用於文字,即簡單字符串,數字等等。 Cfqueryparam不能用於表名(或任何其他* object *名稱)。 – Leigh 2016-01-06 19:50:10

回答

3

這會工作,當然。 CF只是將所有變量轉換爲它們的值並將字符串發送到數據庫驅動程序。

雖然非常非常小心。正如你暗示的那樣,這可能會讓你陷入一些討厭的SQL注入。

+1

如果您使用的是MySQL,那麼可以通過使用反引號(例如'#tableName#')封裝字符串來轉義tableName以使其更安全。其他數據庫將有自己的轉義表和列名稱的方式。 – sqrl0 2010-03-18 20:21:27