首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用内部cfloop调试Coldfusion查询

使用内部cfloop调试Coldfusion查询
EN

Stack Overflow用户
提问于 2016-01-16 05:41:36
回答 5查看 459关注 0票数 1

我正在尝试调试一个cf查询,但不能这样做,因为他复杂的structure.The代码如下:

代码语言:javascript
运行
复制
<cfquery name="qQuery" datasource="#variables.datasource#">
    <cfloop index="i" from="1" to="#ArrayLen(aSQL)#" step="1">
        <cfif IsSimpleValue(aSQL[i])>
            <cfset temp = aSQL[i]>#Trim(DMPreserveSingleQuotes(temp))#
        <cfelseif IsStruct(aSQL[i])>
            <cfset aSQL[i] = queryparam(argumentCollection=aSQL[i])>
            <cfswitch expression="#aSQL[i].cfsqltype#">
                <cfcase value="CF_SQL_BIT">
                    #getBooleanSqlValue(aSQL[i].value)#
                </cfcase>
                <cfcase value="CF_SQL_DATE,CF_SQL_DATETIME">
                    #CreateODBCDateTime(aSQL[i].value)#
                </cfcase>
                <cfdefaultcase>
                    <!--- <cfif ListFindNoCase(variables.dectypes,aSQL[i].cfsqltype)>#Val(aSQL[i].value)#<cfelse> --->
                    <cfqueryparam value="#aSQL[i].value#" cfsqltype="#aSQL[i].cfsqltype#" maxlength="#aSQL[i].maxlength#" scale="#aSQL[i].scale#" null="#aSQL[i].null#" list="#aSQL[i].list#" separator="#aSQL[i].separator#">
                    <!--- </cfif> --->
                </cfdefaultcase>
            </cfswitch>
        </cfif>                     
    </cfloop>               
</cfquery>

如果我运行<cfdump var="#qQuery#">,它不能工作,也不能输出cfoutput,我得到未定义的qQuery错误。我如何才能找到后面正在执行的查询?我不想使用MS SQL事件探查器。

谢谢,

EN

回答 5

Stack Overflow用户

发布于 2016-01-16 06:11:31

获取查询中的所有内容,并将其包装在cfsavecontent中。输出结果。

如果您将cfsavecontent放在cfquery标记中,您甚至不需要担心cfqueryparam标记的反转,尽管您确实需要在查询中重新输出保存的内容。请参阅http://coldflint.blogspot.com/2016/01/debugging-queries-dirty-way.html

基本上,你应该有这个:

代码语言:javascript
运行
复制
<cfquery name="qQuery" datasource="#variables.datasource#">
    <cfsavecontent variable="sqlContent">
        <cfloop index="i" from="1" to="#ArrayLen(aSQL)#" step="1">
            <cfif IsSimpleValue(aSQL[i])>
                <cfset temp = aSQL[i]>#Trim(DMPreserveSingleQuotes(temp))#
            <cfelseif IsStruct(aSQL[i])>
                <cfset aSQL[i] = queryparam(argumentCollection=aSQL[i])>
                <cfswitch expression="#aSQL[i].cfsqltype#">
                    <cfcase value="CF_SQL_BIT">
                        #getBooleanSqlValue(aSQL[i].value)#
                    </cfcase>
                    <cfcase value="CF_SQL_DATE,CF_SQL_DATETIME">
                        #CreateODBCDateTime(aSQL[i].value)#
                    </cfcase>
                    <cfdefaultcase>
                        <!--- <cfif ListFindNoCase(variables.dectypes,aSQL[i].cfsqltype)>#Val(aSQL[i].value)#<cfelse> --->
                        <cfqueryparam value="#aSQL[i].value#" cfsqltype="#aSQL[i].cfsqltype#" maxlength="#aSQL[i].maxlength#" scale="#aSQL[i].scale#" null="#aSQL[i].null#" list="#aSQL[i].list#" separator="#aSQL[i].separator#">
                        <!--- </cfif> --->
                     </cfdefaultcase>
                 </cfswitch>
             </cfif>                     
         </cfloop>               
    </cfsavecontent>
    #sqlContent#
</cfquery>

<pre>#sqlContent#</pre>

请确保在完成调试后将所有内容恢复正常。

票数 2
EN

Stack Overflow用户

发布于 2016-01-16 05:47:22

如果这个问题更多地是关于如何调试或获得一些您可以使用的输出,那么cftrycfcatch是您的朋友。

代码语言:javascript
运行
复制
<cftry>

---code logic---

<cfcatch>
<cfdump var="#cfcatch#">
</cfcatch>
</cfctry>

如果确实存在由循环逻辑生成的语法错误,这将提供ColdFusion遇到的所有错误以及尝试的SQL语句的完整转储。

票数 1
EN

Stack Overflow用户

发布于 2016-01-16 07:39:01

你必须从里到外做这个。

当我查看这个查询时,我注意到它在IsSimpleValue()IsStruct()上是分开的。所以运行这个

代码语言:javascript
运行
复制
 <cfquery name="qQuery" datasource="#variables.datasource#">
    <cfloop index="i" from="1" to="#ArrayLen(aSQL)#" step="1">
       <cfif IsSimpleValue(aSQL[i])>
            <cfset temp = aSQL[i]>#Trim(DMPreserveSingleQuotes(temp))#
       </cfif>                     
    </cfloop>               
 </cfquery>

请注意,从不使用temp。

代码的其余部分创建<cfqueryparam>

结论

此代码不能工作。它无法创建有效的SQL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34820332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档