使用 cfqueryparam 值转储 cfquery sql

Dump cfquery sql with cfqueryparam values

我想转储执行的sql。我知道几种转储 sql 的方法,但是我知道的所有方法都将 cfqueryparam 显示为 ?在 sql。例如,当我转储此查询时:

<cfset testid = 1>
<cfquery name="myVariable" result="myResults" datasource="#myDatabase#">
select id from myTable where id = <cfqueryparam value="#testId#">
<cfquery>

输出为:

select id from myTable where id = ?

我希望输出为:

select id from myTable where id = 1

我尝试了以下方法:

<Cfdump var="#myVariable.getMetadata().getExtendedMetaData().sql#">
<Cfdump var="#myResults.SQL#">

两者均无效。

在你的转储中试试这个 var = "#myResults.SQLParameters#"

https://helpx.adobe.com/coldfusion/developing-applications/accessing-and-using-data/accessing-and-retrieving-data/getting-information-about-query-results.html

我不确定是否有本机解决方案来获取包含 参数的已执行 SQL 字符串 。也许有一个我不知道的基础 Java class(如果你启用了调试,我认为有一个)。

否则您可以从结果结构中获取 sqlsqlParameters 键并自己构建它。我认为不理想,但可以选择。

<cfset testid = 1>
<cfquery name="myVariable" result="myResults" datasource="#myDatabase#">
select id from myTable where id = <cfqueryparam value="#testId#">
<cfquery>

<cfset completeQuery = myResults.sql>
<cfloop index="element" array="#myResults.sqlParameters#">
    <!--- Test for numeric value to help format in the SQL string --->
    <cfset completeQuery = replace(completeQuery, "?", (isNumeric(element)) ? element : "'#element#'", "one")>
</cfloop>

<cfdump var="#completeQuery#">