Помимо защиты от внедрения SQL, CFQUERYPARAM позволяет вам использовать переменные связывания, которые могут повысить производительность, поскольку одинаковые запросы, за исключением некоторых переменных, необходимо компилировать только один раз и можно кэшировать.
Из вашего примера вы использовали cfqueryparam:
<cfquery name="catalog" datasource="mydatasource">
SELECT TableID, DateListed, FirstColor, SecondColor
FROM mytable
WHERE FirstColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="blue">
OR SecondColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="blue">
ORDER BY DateListed DESC
</cfquery>
Это, однако, мало что дает. Выплата в таких ситуациях:
<cfquery name="catalog" datasource="mydatasource">
SELECT TableID, DateListed, FirstColor, SecondColor
FROM mytable
WHERE FirstColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.color#">
OR SecondColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.color#">
ORDER BY DateListed DESC
</cfquery>
Теперь, независимо от того, является ли цвет синим или красным или используется повторно, этот запрос компилируется в базе данных и будет быстрее при последующих вызовах. Кроме того, злоумышленник может изменить значение form.color
на значение blue';drop table users;
, и вы будете защищены от внедрения SQL.