为什么Coldfusion/MySQL中的左连接会导致无休止的循环?

为什么Coldfusion/MySQL中的左连接会导致无休止的循环?,mysql,coldfusion,left-join,infinite-loop,Mysql,Coldfusion,Left Join,Infinite Loop,我正在ColdFusion8MySQL 5.0.88中运行一个搜索查询 查询在Coldfusion中构造一个左连接,如下所示: <cfquery datasource="db" name="q"> SELECT ... </cfscript> 输入到实际查询synatx中: SELECT art, count(*) as number FROM article a <cfqueryparam value="#variables.pl#" c

我正在ColdFusion8MySQL 5.0.88中运行一个搜索查询

查询在Coldfusion中构造一个左连接,如下所示:

<cfquery datasource="db" name="q">
    SELECT ...
</cfscript>
输入到实际查询synatx中:

SELECT art, count(*) as number
    FROM article a
    <cfqueryparam value="#variables.pl#" cfsqltype="cf_sql_longvarchar">
WHERE ...
如果我试图触发此操作,服务器就会挂断,我需要重新启动浏览器选项卡以结束会话。我已从选择中删除所有其他搜索条件。错误是由提供my text contstruct的cfqueryparam引起的

但是我不知道问题出在哪里,因为我从来没有犯过错误。浏览器就这样死掉了,所以我想我是在创造某种无休止的循环

问题: 有人能从我的代码中看出我做错了什么吗

谢谢

编辑:
我设法从服务器挂起变成了提交错误。但是,由于脚本是由Ajax调用触发的,我无法远程访问CFadmin,因此我需要猜测问题可能是什么。

您在这里所做的不是cfqueryparam的目的,我建议您阅读cfqueryparam的正确用法-

将您的代码重构为如下所示应该可以按照您的预期工作。我替换了标签的脚本,只是根据我的喜好,如果您喜欢,可以随意使用脚本

<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>

您在这里所做的不是cfqueryparam的目的,我建议您阅读cfqueryparam的正确用法-

将您的代码重构为如下所示应该可以按照您的预期工作。我替换了标签的脚本,只是根据我的喜好,如果您喜欢,可以随意使用脚本

<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>

哦这个好多了。我继承了最初的剧本,并试图从中有所收获。用你的例子,我很喜欢。但我无法在查询或任何查询结果之后从中获取标志。即使查询后的cfdump也不会触发。需要再调查一下哦。这个好多了。我继承了最初的剧本,并试图从中有所收获。用你的例子,我很喜欢。但我无法在查询或任何查询结果之后从中获取标志。即使查询后的cfdump也不会触发。需要进一步调查一下
<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>