2012-03-19 2 views

ответ

16

Главное преимущество - дополнительный уровень проверки работоспособности для ваших запросов, прежде чем передавать его в ваш запрос. Кроме того, в случае значений времени даты, я считаю, что CF будет правильно переводить строки даты и времени в соответствующий формат базы данных, если указан cfsqltype = "CF_SQL_DATE" или = "CF_SQL_TIMESTAMP".

Кроме того, я думаю, что для будущих разработчиков будет более ясно видеть типы, за исключением случаев, когда они читают ваш код.

+0

CF также преобразует любые значения truey/falsey в CF_SQL_BIT (1 или 0) и любое числовое значение в CF_SQL_INT (округление). – Henry

+0

Спасибо за хорошо выраженный ответ! Я подумал, что это были некоторые из причин, но не удалось найти документацию, и это очень ясно и красно. – froadie

13

Я бы добавил к комментарию Джейка. В большинстве СУБД база данных должна будет запускать вашу переменную через поиск по типу, чтобы гарантировать, что это правильный тип или может быть применена к правильному типу неявно. БД не просто бросает переменную «type Any» в таблицу или представление. Он должен построить правильный ввод в план выполнения. Поэтому, если вы не предоставляете тип, вы просите БД «понять это».

Принимая во внимание, что при указании типа, который вы предварительно упреждаете или предварительно квалифицируете тип данных. Двигатель знает, что драйвер представляет переменную определенного типа, а затем может использовать ее напрямую или напрямую ее выводить.

Помните, что, хотя безопасность является хорошей причиной для использования cfqueryparam, это только одна причина. Другая причина состоит в том, чтобы создать правильно подготовленные операторы, которые могут эффективно выполняться - и идеально «поп» кэш плана выполнения на сервере БД.

+2

+1. Re: * .. вы просите БД «выяснить это». * .. и результаты не всегда то, что вы намеревались. Лучше избегать неявного преобразования. – Leigh

+0

Спасибо, хорошие баллы. Просто из интереса - это требует дополнительных накладных расходов, чтобы база данных соответствовала типам данных? (Как и в этом случае, потребуется немного больше времени, чтобы работать без cfsqltype, потому что db должен тратить время «выяснить это?» – froadie

+0

Froadie - есть некоторые накладные да. Было бы довольно сложно измерить, я уверен. В большинстве случаев вы не увидели бы этого. Но нет причин, по которым я могу думать, что НЕ использовать cfsqltype :) –