制作阵列:
<cfset tempArr = DeserializeJSON(URL.data) />
<cfset temp1 = "" />
<cfset temp2 = "" />
<cfset selectList1 = "" />
<cfset selectList2 = "" />
<cfloop array=#tempArr# index="i">
<cfset temp1 = GetToken(i,1,":")>
<cfset temp2 = GetToken(i,2,":")>
<cfset selectList1 = listAppend(selectList1, temp1)>
<cfset selectList2 = listAppend(selectList2, temp2)>
</cfloop>
循环通过??:
<cfquery name="sample" datasource="database">
SELECT *
FROM table
WHERE
<cfloop from="1" to="#listLen(selectList1)#" index="i"/>
#ListGetAt(selectList1, i)# = <cfqueryparam value="#ListGetAt(selectList2)#" />
</cfloop>
<cfif i neq listLen(#selectList1#)>
AND
</cfif>
</cfquery>
我的目的是根据从javascript页面收到的数组在表格中动态搜索。数据来自form -> columnName:searchBy
。即,样本片段为name:Jim
。我想构建动态代码,允许我搜索不同的列,但我不能让我的循环工作。如果有帮助,我会收到此错误:
(Invalid CFML construct found on line 20 at column 59.)
就是这一行:
<cfloop from="1" to="#listLen(selectList1)#" index="i" />
答案 0 :(得分:4)
Kyle的回答是100%正确,但这是一个更好的解决方案。使用列表是一个非常低效的过程(见下文),使用listGetAt
只会激怒未来的程序员。您可以使用数组来存放数据,并使用默认的WHERE
语句来简化循环。
<cfset tempArr = DeserializeJSON(URL.data) />
<cfset temp1 = "" />
<cfset temp2 = "" />
<cfset selectList1 = [] />
<cfset selectList2 = [] />
<cfloop array=#tempArr# index="i">
<cfset temp1 = GetToken(i,1,":")>
<cfset temp2 = GetToken(i,2,":")>
<cfset arrayAppend(selectList1, temp1)>
<cfset arrayAppend(selectList2, temp2)>
</cfloop>
<cfif NOT arrayIsEmpty(tempArr)>
<cfquery name="sample" datasource="database">
SELECT column1, column2, column3
FROM table
WHERE 1 = 1
<cfloop from="1" to="#listLen(selectList1)#" index="i"/>
AND #selectList1[i]# = <cfqueryparam value="#selectList2[i]#" />
</cfloop>
</cfquery>
</cfif>
答案 1 :(得分:3)
我认为您的问题可能是cfloop
标记是自动关闭的。试试这个:
<cfloop from="1" to="#listLen(selectList1)#" index="i">
答案 2 :(得分:1)
list
属性可以在<cfloop>
中使用。
<cfloop list="#selectList1#" index="i">
#i# <!--- list element can be processed here with variable name #i# --->
</cfloop>