3

何らかの理由で、*.cfmページでは正常に機能し、 で正常に機能したコードが*.cfc、エラーが検出されるとエラーをスローするようになりました。

エラーは次のとおりです。

Element SQL is undefined in CFCATCH. 

これがスローされるコード ブロックは次のようになります。

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

何かご意見は?

アップデート

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

素晴らしく簡単で、うまくいきます。接吻

4

1 に答える 1

6

エラーデータにSQLステートメントが含まれていなかったことを意味します。すべてのエラーに対して変数が存在すると想定すべきではありません。

<cfif isDefined("cfcatch.sql")>
     <p>#cfcatch.SQL#</p>
 </cfif>

簡単な修正です。おそらく、次のように構造体をループするのが最適です。

<cfparam name="errorMessage" default="">
<cfloop collection="#cfcatch#" item="this">
    <cfset errorMessage = errorMessage & "<p>#cfcatch[this]#</p>">
</cfloop>
于 2012-04-26T15:47:10.063 に答える