Построение параметра запроса динамически - PullRequest
0 голосов
/ 20 декабря 2011

Привет! Я пытаюсь построить параметр запроса динамически и получаю сообщение об ошибке. Я использую приведенный ниже код:

<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] [Драйвер JDBC для SQLServer] [SQLServer] Неверный синтаксис рядом с '<'.</p>

Если я посмотрю на вывод, он выглядит правильно, но обычно, используя cfquerypram, вы просто получаете (param1), uid_prodf_featid = (param1) в сообщении об ошибке, которое отображает следующее:

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

Jason

1 Ответ

2 голосов
/ 20 декабря 2011

Вы не можете создавать и выполнять CFML динамически, как пытаетесь это сделать. Мне кажется, что вы пытаетесь построить запрос SQL вне контекста тега cfquery; это было бы хорошо, за исключением вашей необходимости параметризации. Если возможно, измените код для запуска в паре тегов 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_features ... Мне трудно представить, что для этого есть веская логическая причина (а не ИЛИ), но если это так, мой пример победил ' не работайте для этого - вместо этого измените его обратно на последовательность И в цикле.

...