2011-02-24 72 views
2

我正在對排序和一部分進行調查,我遍歷所有問題,cfquery,然後使用查詢作爲變量。它看起來像這樣:Coldfusion - 如何在變量內部轉義變量?

<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
<cfif len(q#q_number#check.something) GT 0> 

這是行得通嗎?

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

,Q#q_number#check.something

查詢被放置在變量範圍,這意味着可以使用數組符號來訪問它。這適用於CF9。儘管您可能需要爲CF8添加一個[rowNumber]。

<cfif len(variables["q#q_number#_check"].something) GT 0> 

但是你真的應該避免在循環中查詢。如果你能詳細說明這些要求,我們可以提出一些更好的選擇。

0

您可以使用評估將查詢保存到變量,然後像您通常那樣使用它。

<cfset resolved_query = evaluate("q#q_number#_check")> 
<cfif len(resolved_query.something) GT 0> 
+0

沒錯,但評估是矯枉過正。只需使用變量作用域。 – Leigh 2011-02-24 23:24:27

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個相同的查詢。

希望幫助一些 添