古い ColdFusion コードの束をクリーンアップするという不幸な仕事があります。クエリはいたるところにあります。メンテナンスを容易にするために、クエリをすべて共通の CFC に移動する作業を行っています。
cfquery
が単一引用符を二重単一引用符に自動的に変換するため、問題が発生しています。どうすればその動作をオーバーライドできますか?
より具体的な情報は以下のとおりです。
だからここに私が始めたクエリがあります:
<cfquery name="getObjectInfo" datasource="#BaseDS#">
SELECT groupName AS lastname, '[Group]' AS firstname
FROM groups
WHERE groups.group_id = #objectreference_id#
</cfquery>
ここで奇妙なのは、リテラルが「選択」されていることです。これは、表示方法が原因です (繰り返しますが、これは書いていません。少し整理しようとしているだけです)。したがって、共通関数には、select 句のオプションのパラメーターがあります。
<cffunction name="fSelGroup" access="public" returntype="query"
hint="Returns query selecting given group.">
<cfargument name="intGroupID" type="numeric" required="true"
hint="ID of group to be returned." />
<cfargument name="strSelectAttributes" type="string" required="false"
hint="Attributes to be selected in query"
default="*" />
<cfquery name="getObjectInfo" datasource="#Application.DataSource#">
SELECT #Arguments.strSelectAttributes#
FROM Groups
WHERE Group_ID = #Arguments.intGroupID#
</cfquery>
<cfreturn getObjectInfo />
</cffunction>
問題は"GroupName AS LastName, '[Group]' AS FirstName"
次のとおりです。strSelectAttributes パラメーターを渡すと、データベースに送信されるクエリは次のようになります。
SELECT GroupName AS LastName, ''[Group]'' AS FirstName
FROM Groups
WHERE Group_ID = 4
ほら、私の引用符が無効なクエリに「サニタイズ」されました。