Это меня сильно сбивает с толку, так как я делал это сотни раз, но теперь это меня не устраивает.
Я выполняю базовое обновление запроса с использованием параметров CF, и первичный ключ для таблицы передает пустое значение, что приводит к критическому сбою.
Даже если я ввожу жестко запрограммированное число в #form.id placeholder#
, я получаю следующее:
Invalid data '' for CFSQLTYPE CF_SQL_NUMERIC.
Вот моя кодовая база
<cfquery name="updateIdea" datasource="#request.db#">
UPDATE freshideas
SET subject = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.subject#" null="no" />,
content = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.content_text#" />,
postmonth = <cfqueryparam cfsqltype="cf_sql_numeric" value="#form.postmonth#" />,
postyear = <cfqueryparam cfsqltype="cf_sql_numeric" value="#form.postyear#" />,
imglink = <cfqueryparam cfsqltype="cf_sql_varchar" value="#image#" />,
oindex = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.oindex#" null="no" maxlength="3" />
WHERE id = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.id#" null="no" />
</cfquery>
Вставка работает нормально, а идентификатор столбца - auto_increment int(5).
cf_sql_integer
. Поэтому, если в сообщении об ошибке указаноcf_sql_numeric
, это указывает на проблему в одном из других полей, напримерform.postmonth
илиform.postyear
. - person Leigh   schedule 31.03.2012numeric
. Можете ли вы сделать дамп области FORM и опубликовать фактические значения при возникновении ошибки? - person Leigh   schedule 31.03.2012StructKeyExists(form, "xyz") AND isNumeric(form.xyz)
, это также гарантирует, что вы не будете передавать пустую строку вcf_sql_numeric
, что, скорее всего, имеет место здесь. - person Sergey Galashyn   schedule 31.03.2012null="no"
не является проверкой. Это переключатель, который решает, передается ли значение NULL в БД. Обычно здесь есть логическое выражение, напримерnull="#Trim(FORM.foo) eq ''#"
, которое устанавливает параметр в NULL, когда значение формы пусто. Только не используйте его со значениямиyes
илиno
, так как в этом нет никакого смысла. - person Tomalak   schedule 31.03.2012cf_sql_numeric
вместо числа была передана пустая строка. Посколькуnull="no"
в любом случае используется по умолчанию (и он даже не используется в ваших числовых столбцах), его присутствие не должно иметь никакого эффекта так или иначе. - person Leigh   schedule 01.04.2012