Coldfusion 动态构建查询参数

Coldfusion 动态构建查询参数,coldfusion,Coldfusion,您好,我正在尝试动态构建一个查询参数,但出现了一个错误,我正在使用下面的代码 <cfset featQuery=""> <cfloop list="#arguments.uid_features#" index="x"> <cfif x neq "0"> <cfif Len(featQuery) gt 0> <cfset featQuery = featQuery& " AND "> </cfif> <cfse

您好,我正在尝试动态构建一个查询参数,但出现了一个错误,我正在使用下面的代码

<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 Driver][SQLServer]语法不正确,您无法像尝试那样动态构建和执行CFML。在我看来,您试图在cfquery标记上下文之外构建SQL查询;这将是好的,除了您需要参数化它。如果可能,请将代码更改为在cfquery标记对中运行:

<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>
另外,正如您所看到的,我对您的查询结构做了一些更改—您有很多代码来做一些事情,正如我上面所展示的那样,这些事情更容易完成

编辑


我看到您实际上正在对uid_功能列表中的每个项执行和操作。。。我很难想象这是一个有效的逻辑原因,而不是OR,但如果是这样,我的示例将不适用于这一点-而是将其更改回循环中的一系列和条件。

您不能像尝试那样动态地构建和执行CFML。在我看来,您试图在cfquery标记上下文之外构建SQL查询;这将是好的,除了您需要参数化它。如果可能,请将代码更改为在cfquery标记对中运行:

<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>
另外,正如您所看到的,我对您的查询结构做了一些更改—您有很多代码来做一些事情,正如我上面所展示的那样,这些事情更容易完成

编辑


我看到您实际上正在对uid_功能列表中的每个项执行和操作。。。我很难想象这是一个有效的逻辑原因,而不是OR,但如果是这样,我的示例将不适用于此-而是将其改回循环中的一系列和条件。

您好,谢谢您的回答,但这不是我想要做的。我从需要添加AND子句的id列表中构建where语句,即1和2、3和4等,然后将该子句插入查询中。类似于featQuery,它构建了follow子句,其中uid\u prodf\u featid=和uid\u prodf\u featid=in运算符将为我提供许多结果。我不擅长解释抱歉!谢谢,我现在就试试,谢谢。操作步骤是钻取一组特定的产品,即带有滑梯、秋千和猴架的产品。不要购买带有滑梯或秋千等的产品。使用循环非常有效,谢谢。我在你的答案上打了个勾,因为你所做的编辑正是你所需要的!我仍然看不到您所描述的逻辑——其中uid\u prodf\u featid=和uid\u prodf\u featid=始终不返回任何结果,因为单个值不能同时为5和6。但不管怎样,我很高兴你从中得到了一些帮助。我向你的渊博知识低头,你是对的!我的问题现在更大了!我的产品具有分配给它们的功能,我使用具有以下结构的相关表添加功能。uid\u prodfeat\u feat,uid\u prodfeat\u featidlink到功能,uid\u prodfeat\u prodidlink到产品。如果用户点击猴架,我会显示所有带有猴架的产品,如果用户点击秋千,我需要它只抓取带有秋千和猴架的产品。如果我使用IN操作符,我得到的所有产品都带有猴杆或秋千。我需要用第一个查询结果创建第二个查询吗?谢谢你的回答,但这不是我想要做的。我从需要添加AND子句的id列表中构建where语句,即1和2、3和4等,然后将该子句插入查询中。类似于featQuery,它构建了follow子句,其中uid\u prodf\u featid=和uid\u prodf\u featid=in运算符将为我提供许多结果。我不擅长解释抱歉!谢谢,我现在就试试,谢谢。操作步骤是钻取一组特定的产品,即带有滑梯、秋千和猴架的产品。不要购买带有滑梯或秋千等的产品。使用循环非常有效,谢谢。我在你的答案上打了个勾,因为你所做的编辑正是你所需要的!我仍然看不到您所描述的逻辑——其中uid\u prodf\u featid=和uid\u prodf\u featid=始终不返回任何结果,因为单个值不能同时为5和6。但不管怎样,我很高兴你从中得到了一些帮助。我向你的渊博知识低头,你是对的!我的问题现在更大了!我的产品具有分配给它们的功能,我使用具有以下结构的相关表添加功能。uid\u prodfeat\u feat,uid\u prodfeat\u featidlink到功能,uid\u prodfeat\u prodidlink到产品。如果用户点击猴架,我会显示所有带有猴架的产品,如果用户点击秋千,我需要它只抓取带有秋千和猴架的产品。如果我使用IN操作符,我得到的所有产品都带有猴杆或秋千。我需要信用卡吗
使用第一个查询结果执行第二个查询您使用的是什么版本的CF?您使用的是什么版本的CF?