У меня есть неудачная задача очистить кучу старого кода 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
Видите ли, мои кавычки были "дезинфицированы" в недопустимый запрос.