2011-12-19 92 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