CFCATCH在CFC中抛出错误

Rob*_*b M 3 coldfusion cfc

出于某种原因,一段在*.cfm页面上正常工作并且在a中工作正常的代码*.cfc现在在检测到错误时抛出错误.

错误是:

Element SQL is undefined in CFCATCH. 
Run Code Online (Sandbox Code Playgroud)

这个抛出的代码块看起来像这样:

<cfcatch type="database">
    <cfset errorMessage = "
        <p>#cfcatch.message#</p>
        <p>Please send the following to a developer:</p>
        <p>#cfcatch.SQL#</p> <--- ERROR HERE
        <p>#cfcatch.queryError#</p>
        <p>#cfcatch.Where#</p>">
    some other stuff
</cfcatch>
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

UPDATE

使用@BenKoshy建议,我修改了我的<cfcatch>陈述.

还记得KISS吗?保持简单愚蠢

使用他的方法,然后修改它,我得到的数据比我使用的更多,所以我选择了一个简单的版本,它的工作方式与广告一样.

<cfif isDefined("cfcatch.message")>
  <cfset errorMessage = errorMessage & "<p>#cfcatch.message#</p>">
</cfif>
<cfif isDefined("cfcatch.SQL")>
    <cfset errorMessage = errorMessage & "<p>Please send the following to a developer:</p><p>#cfcatch.SQL#</p>">
</cfif>
<cfif isDefined("cfcatch.QueryError")>
    <cfset errorMessage = errorMessage & "<p>#cfcatch.queryError#</p>">
</cfif>
<cfif isDefined("cfcatch.Where")>
    <cfset errorMessage = errorMessage & "<p>#cfcatch.Where#</p>">
</cfif>
Run Code Online (Sandbox Code Playgroud)

很好,很容易,它的工作原理.吻

BKK*_*BKK 6

只是意味着错误数据不包含SQL语句.不应该假设所有错误都存在变量:

<cfif isDefined("cfcatch.sql")>
     <p>#cfcatch.SQL#</p>
 </cfif>
Run Code Online (Sandbox Code Playgroud)

很容易解决.可能最好循环遍历结构,如下所示:

<cfparam name="errorMessage" default="">
<cfloop collection="#cfcatch#" item="this">
    <cfset errorMessage = errorMessage & "<p>#cfcatch[this]#</p>">
</cfloop>
Run Code Online (Sandbox Code Playgroud)

  • `structKeyExists(cfcatch,"sql")`更精确.我在`isDefined()`上使用它. (2认同)