Первым делом первым делом. Пожалуйста, используйте cfqueryparam
, для всех пользовательских вводов, когда вы используете его в запросе. Поля #form.firstname#, #form.lastname#, etc
все должны быть в cfqueryparam
, чтобы предотвратить SQL Инъекцию.
Проблема, с которой вы здесь сталкиваетесь, заключается в неправильном использовании атрибута NULL
тега cfqueryparam
.
Параметр null
должен быть выражением, результатом которого будет true
или false
. Если в качестве значения указать yes
напрямую, результат будет выглядеть следующим образом.
suffix = NULL
Теперь давайте посмотрим, как использовать атрибут null
.
<cfqueryparam
value = "#form.suffix#"
cfsqltype = "CF_SQL_INTEGER"
null = "#len(trim(form.suffix)) EQ 0#"
>
Приведенное выше будет гарантировать, что NULL
будет передано в качестве значения столбца, если form.suffix
пусто. Вы можете изменить эту проверку, основываясь на логике вашего приложения c.
Кроме того, в более новых версиях (CF 11 +) не требуется префикс CF_SQL_
в атрибуте type
.
Таким образом, окончательный запрос должен выглядеть примерно так:
<cfquery name="updt_person" datasource="#application.datasource#">
UPDATE tblperson
SET
firstname = <cfqueryparam value = "#form.firstname#" cfsqltype = "VARCHAR">,
lastname = <cfqueryparam value = "#form.lastname#" cfsqltype = "VARCHAR">,
address_line_1 = <cfqueryparam value = "#form.address_line_1#" cfsqltype = "VARCHAR">,
address_line_2 = <cfqueryparam value = "#form.address_line_2#" cfsqltype = "VARCHAR">,
city = <cfqueryparam value = "#form.city#" cfsqltype = "VARCHAR">,
stateid = <cfqueryparam value = "#form.stateid#" cfsqltype = "VARCHAR">,
zip = <cfqueryparam value = "#form.zip#" cfsqltype = "INTEGER" null = "#len(trim(form.zip)) EQ 0#">,
plus4 = <cfqueryparam value = "#form.plus4#" cfsqltype = "INTEGER" null = "#len(trim(form.plus4)) EQ 0#">,
area_code = <cfqueryparam value = "#form.area_code#" cfsqltype = "INTEGER" null = "#len(trim(form.area_code)) EQ 0#">,
prefix = <cfqueryparam value = "#form.prefix#" cfsqltype = "INTEGER" null = "#len(trim(form.prefix)) EQ 0#">,
suffix = <cfqueryparam value = "#form.suffix#" cfsqltype = "INTEGER" null = "#len(trim(form.suffix)) EQ 0#">
WHERE personid = <cfqueryparam value = "#get_personid.personid#" cfsqltype = "INTEGER">
</cfquery>