2012-07-10 198 views
1

我在Coldfusion8(MySQL 5.0.88)中運行搜索查詢。爲什麼左側加入Coldfusion/MySQL會導致無限循環?

查詢構造了一個LEFT JOIN在ColdFusion中,像這樣:

<cfquery datasource="db" name="q"> 
    SELECT ... 
</cfscript> 

並遍歷結果,以創建MySQL查詢語法:

<cfset variables.pl= "LEFT JOIN pricelists p ON "> 
<cfloop query="q" > 
    <cfscript> 
    if(q.listitem IS '')  
     variables.pl = variables.pl & '(a.iln = p.iln AND p.pl= "-Standard-" AND p.ean = a.ean AND p.iln = "#q.iln_verkaeufer#") OR '; 
    else 
     variables.pl= variables.pl & '(a.iln = p.iln AND p.pl= "#q.pl#" AND p.ean = a.ean AND p.iln = "#q.userID#") OR 
    </cfscript> 
</cfloop> 
<cfset variables.pl= variables.pl& "(1=0)"> 

所以最後會是這個樣子:

LEFT JOIN plist p ON (p.iln = a.iln AND p.pl= "-Standard-" AND p.iln = "1111111111111") OR (p.iln = a.iln AND p.pl= "I" AND p.iln = "1111122222221") OR (1=0) 

哪一個被輸入到實際查詢synatx中:

SELECT art, count(*) as number 
    FROM article a 
    <cfqueryparam value="#variables.pl#" cfsqltype="cf_sql_longvarchar"> 
WHERE ... 

如果我試圖觸發這個,服務器只是掛起,我需要重新啓動瀏覽器選項卡來結束會話。我從我的選擇中刪除了所有其他搜索條件。該錯誤是由cfqueryparam提供我的文本contstruct引起的。

但是我不知道問題可能是什麼,因爲我從來沒有得到一個錯誤。瀏覽器剛剛死機,所以我想我正在創建一種無限循環。

問題
任何人都可以從我的代碼告訴我做錯了什麼?

謝謝!

編輯: 我設法從服務器掛斷到提交錯誤。但是,由於腳本是由Ajax調用觸發的,我無法遠程訪問CFadmin,所以我需要盲目解決問題。

回答

4

你在做什麼這裏就不cfqueryparam的目的,我建議在cfqueryparam的正確用法讀了 - http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f6f.html

重構你的代碼,類似下面爲你打算應該工作。我用標籤取代了腳本,如果這是您的偏好,可以隨意使用腳本。

<cfquery ...> 
SELECT art, count(*) as number 
FROM article a 
LEFT JOIN pricelists p ON 
<cfloop query="q" > 
<cfif q.listitem IS ''> 
    (a.iln = p.iln 
    AND p.pl= "-Standard-" 
    AND p.ean = a.ean 
    AND p.iln = <cfqueryparam value='#q.iln_verkaeufer#' /> 
    ) 
<cfelse> 
    (a.iln = p.iln 
    AND p.pl= <cfqueryparam value="#q.pl#"/> 
    AND p.ean = a.ean 
    AND p.iln = <cfqueryparam value="#q.userID#" /> 
    ) 
</cfif> 
<cfif NOT q.isLast()>OR</cfif> 
</cfloop> 
WHERE ... 
</cfquery> 
+0

哦。這更好。我繼承了原來的劇本,並且試圖從中創造出一些東西 – frequent 2012-07-10 21:22:32

+0

hm。用你的例子,我喜歡很多。但是在查詢或任何查詢結果後,我無法獲得標誌。即使是查詢後的cfdump也不會觸發。需要更多地瞭解這一點 – frequent 2012-07-10 21:46:45