В дополнение к ответу Шона , одна важная вещь, о которой никто не упомянул, это то, что вы, возможно, работаете из-за неправильного представления о запросах в CF.Тот, который потенциально может иметь некоторые очень неприятные последствия для базы данных, если не быть осторожным.
Возможность смешивать CFML и SQL не означает, что ваш сервер баз данных выполняет код CFML
Серверы баз данных ничего не знают о CFML.Фактически, сервер базы данных даже не видит какого-либо CFML-кода в cfquery.Весь код CFML (и / или cfcript) выполняется сервером приложений CF еще до того, как сервер базы данных входит в изображение.
Так что же на самом деле происходит, когда вы смешиваете CFML и SQL?Концептуально, когда код выполняется:
Сервер CF пытается оценить любые теги / функции CF и преобразовать их в литеральные значения.Эти значения затем объединяются с остальной частью обычного текста SQL, чтобы сформировать одну большую строку SQL.
CF затем передает эту строку SQL в базу данных для выполнения
- Сервер базы данных пытается выполнить строку SQL и возвращает любые результаты на сервер CF
- Сервер CF преобразует результаты базы данных в объекты, например «Query».
Итак, как вы можете видеть, нет абсолютно никакого смешения двух.CF выполняет свою работу по обработке любого CFML.База данных обрабатывает любой SQL.Никогда не встретимся между ними.
В чем потенциальная проблема?
Возьмите такой запрос.Он не рухнет, но и не даст ожидаемого результата.
<cfset FORM.newAccountNumber = "1234,ABC">
<cfquery datasource="dsn">
UPDATE someTable
SET AccountNumber = '#listFirst(FORM.newValue, ",")#'
</cfquery>
Что на самом деле происходит, так это.Во-первых, CF выполняет функцию списка, которая возвращает буквенную строку «1234».
#listFirst(variables.newValue, ",")#
CF затем вставляет этот литерал в остальную часть оператора SQL, создавая следующее:
UPDATE someTable
SET AccountNumber = '1234'
При отправке в базу данных этот оператор устанавливает каждые один номер счета во всей таблице с тем же значением: «1234».Почти наверняка, не желаемый результат.
Понимание того, как код CFML интерпретируется в запросах, может помочь избежать некоторых действительно неприятных последствий для вашей базы данных.Особенно, если у вас нет последних резервных копий ...