Cfqueryオブジェクトの生成にSQLを使用するにはどうすればよいですか?オブジェクトをcfdumpすると、実際のクエリを含む「SQL」プロパティを持つことが示されます。 API呼び出しを行っているため、デバッグをオンにしても効果がありません。そのため、出力はHTMLではなく、デバッグ情報によって破損します。実行されているクエリを正確にデバッグしようとしています。
<cfquery name="tableElements" datasource="TestSQLServer">
SELECT * FROM tableElements
</cfquery>
<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #tableElements.SQL#</cfoutput> <!--- Error: Element SQL is undefined in TABLEELEMENTS. --->
'result'属性をcfqueryに追加します。 SQLは、クエリ変数ではなく、結果構造体にあります。
<cfquery name="tableElements" datasource="TestSQLServer" result="r">
SELECT * FROM tableElements
</cfquery>
<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #r.SQL#</cfoutput>
個人的には、(?疑問符ではなく)すべてのパラメーターが挿入されたSQLが必要です。このようにして、SQLをコピーして貼り付けるだけで、データベースに対してクエリを実行できます。これを行うには、(他のコメントで述べられているように)結果を取得し、この関数を使用します...
<cffunction name="getRealSQL" returntype="string">
<cfargument name="qryResult" type="any">
<cfset realSQL = arguments.qryResult.sql>
<cfloop array="#arguments.qryResult.sqlParameters#" index="a">
<cfscript>
if (NOT isNumeric(a)) a = "'#a#'";
realSQL = Replace(realSQL, "?", a);
</cfscript>
</cfloop>
<cfreturn realSQL>
</cffunction>
Cfqueryのresult属性を使用します。変数名を指定すると、SQLでsqlというキーが使用されます。
クエリを保持する構造(Kipが必要とするものではなく、SQLが必要)をcfdumpする場合は、metainfo="yes"
を使用します。 W/oは、クエリのレコードのみを生成します.。
<cfset stx={}>
<cfquery name="stx.q" datasource="myDataSource">
select emp_id from employees where 1=2
</cfquery>
<cfdump var="#stx.q#">
<cfdump var="#stx.q#" metainfo="yes">
通常の出力内にデバッグ出力をダンプすると問題が発生する場合は、常に<cfdump var="#myvar#" output="c:\filename.html">
を使用します。そうすると、ダンプは別のHTMLファイルになります。
CF管理者を介してデバッグをオンにするためのアクセス権がありますか?これにより、特定のページで呼び出されているすべてのクエリ(SQLステートメントを含む)のローリングリストが表示されます。