我正在对各种问题进行调查,并且我将循环查看所有问题,cfquery,然后将查询用作变量。它看起来像这样:
<cfloop index="q_number" from="1" to "10">
<cfquery name="q#q_number#_check" datasource="datasource">
SELECT *
FROM table
</cfquery>
<cfif len(#q#q_number#check.something#) GT 0>
由于变量内部的变量,我收到错误。这有什么快速的黑客攻击吗? 我试着做了
<cfset escape_var = q#q_number#_check.question>
<cfif len(#variables.escape_var#) GT 0>
但这不起作用。
谢谢。
答案 0 :(得分:3)
,Q#q_number#check.something
查询放在变量范围内,这意味着您可以使用数组表示法来访问它。这适用于CF9。虽然您可能需要为CF8添加[rowNumber]。
<cfif len(variables["q#q_number#_check"].something) GT 0>
但是你真的应该避免在循环中查询。如果你能详细说明要求,我们可以建议一些更好的选择。
答案 1 :(得分:0)
<cfif len(q#q_number#check.something) GT 0>
这有用吗?
答案 2 :(得分:0)
你的外观中有IF吗?如果是这种情况,则无需动态命名查询。
如果您需要外观,我建议将结果集粘贴在数组中。
<cfset checkArray = arrayNew()>
<cfloop index="q_number" from="1" to "10">
<cfquery name="q_check" datasource="datasource">
SELECT *
FROM table
</cfquery>
<cfif len(q_check.something) GT 0>
</cfif>
<cfset arrayAppend(checkArray,qcheck)>
</cfloop>
<cfif len(checkArray[1].something) GT 0>
</cfif>
您可能需要使用IF语句来获得您想要的结果,但这应该让您走上正确的轨道。
答案 3 :(得分:0)
您可以使用evaluate将查询保存到变量,然后像平常一样使用它。
<cfset resolved_query = evaluate("q#q_number#_check")>
<cfif len(resolved_query.something) GT 0>
答案 4 :(得分:0)
如果你在循环中没有得到任何特殊内容,那么为什么要在那里查询呢? 你能不能只使用一个查询。如果您使用的是where子句,则在循环内使用查询查询来获取其他信息。
<cfquery name="myquery" datasource="ds">
select * from mytable
</cfquery>
<cfset myquestions = arrayNew(1)>
<cfloop index="q_number" from="1" to "10">
<cfquery name="myotherquery" dbtype="query">
select * from myquery
where question = #q_number#
</cfquery>
<cfif myotherquery.something GT 0>
<cfset myquestions[q_number] = myotherquery.something>
</cfif>
除非你需要在循环之外的某个循环中查询的结果,否则你不需要动态查询名称。每次循环时,名称都将被覆盖。
我只是设置一个数组来存储我的循环结果然后我可以在以后使用它们而不需要有10个相同的查询。
希望有所帮助 添