2011-12-19 89 views
0

你好我試圖動態生成一個查詢參數,和我得到一個錯誤,我使用下面的代碼,建立一個查詢參數動態

<cfset featQuery=""> 
<cfloop list="#arguments.uid_features#" index="x"> 
<cfif x neq "0"> 
<cfif Len(featQuery) gt 0> 
<cfset featQuery = featQuery& " AND "> 
</cfif> 
<cfset featQuery = featQuery & 'uid_prodf_featid = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="' & x & '">'> 
</cfif> 
</cfloop> 

我得到的ColdFusion此錯誤信息; [Macromedia] [SQLServer JDBC驅動程序] [SQLServer]'<'附近的語法不正確。

如果我看看輸出,它看起來是正確的,但通常使用cfquerypram,你只需在它顯示的錯誤消息中得到(param1),uid_prodf_featid =(param1);

uid_prodf_featid = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="5"> 

傑森

+0

你使用什麼版本的CF? – 2011-12-20 00:19:58

回答

2

你不能真正建立和動態執行CFML就像你試圖做。它看起來像你試圖在cfquery標記上下文之外構建一個SQL查詢;這很好,除了你需要參數化它。此外

<cfquery...> 
SELECT * FROM tableFoo 
<cfif ListLen(arguments.uid_features)> 
WHERE uid_prodf_featid IN (<cfqueryparam value="#arguments.uid_features#" list="true" cfsqltype="CF_SQL_INTEGER">) 
</cfif> 
</cfquery> 

,你可以看到我已經改變了你的查詢結構一點 - 你有很多的代碼做一些事情,爲更:如果可能的話,改變你的代碼到一個CFQUERY標籤對中運行如上所示輕鬆完成。

編輯

我看到你實際上是在做什麼,在你的uid_features列表中每個項目的操作...我有一個很難想象有是應該是一個有效的邏輯原因(而不是OR)但如果是這樣的話,我的例子將無法工作 - 而是將其更改回循環中的一系列AND條件。

+0

嗨,感謝您的回覆,但這不是我想要做的。我正在建立一個id列表的where語句,需要添加一個「AND」子句,即。 1和2以及3和4等,然後我將子句插入到查詢中。像這樣WHERE#featQuery#這樣就構建了後面的子句WHERE uid_prodf_featid = AND uid_prodf_featid = in運算符會給我許多結果。我不善於解釋對不起! – 2011-12-19 23:53:46

+0

謝謝,現在就試試,謝謝。 AND操作是鑽到一組特定的產品上,即帶有幻燈片和鞦韆和猴棒的產品。不要得到幻燈片或鞦韆等產品 – 2011-12-20 00:03:54

+0

優秀的使用循環工作完全謝謝你。我已在您的答案中打上勾號,因爲您所做的編輯正是需要的! – 2011-12-20 00:19:00