我正在Coldfusion8中运行搜索查询(MySQL 5.0.88)。
查询在Coldfusion中构造LEFT JOIN,如下所示:
<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,我需要盲目解决问题所在。
答案 0 :(得分: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>