Я вставляю нулевые записи, когда я ничего не вводил
Я пытаюсь сначала проверить NULL и, если значение равно NULL, пропустите INSERT
, Но это не то, что происходит. Код вставляет пустые записи, хотя я ничего не вводил в поле формы. Это почти как признание того, что не существует.
<cfoutput>
<cfif form.TBCom is not "">
<cfquery name="TestTBComm" datasource="TrenaTest">
INSERT INTO Comment1 (
UniqueNum,
ComTyp,
Comments )
SELECT
'#UniqueNum#',
'#TBComV#',
'#TBCom#'
</cfquery>
</cfif>
</cfoutput>
3 ответа
Предыдущие ответы верны, так как при тестировании общих строк проверка NULL не применяется в CF. Вы либо проверяете длину или значение.
Этот запрос напугал меня настолько, что я подумал, что необходим полный пример. Обязательно, чтобы КАЖДОЕ поле запроса, чьи данные были предоставлены пользователем, содержалось в CFQUERYPARAM. Ищите термин " инъекция SQL" по причинам, почему.
Этот запрос должен работать для вас:
<cfquery name="TestTBComm" datasource="TrenaTest">
INSERT INTO Comment1 (
UniqueNum,
ComTyp,
Comments )
VALUES (
<cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.UniqueNum#">
, <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.TBComV#" NULL="#!Len(FORM.TBComV)#">
, <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.TBCom#" NULL="#!Len(FORM.TBCom)#">
)
</cfquery>
В параметре NULL обратите внимание на "!", Который инвертирует результат функции LEN().
Если вы имеете в виду, что хотите пропустить вставку, когда поле формы пусто, trim()
это сначала и проверьте длину. Затем пропустите вставку, если длина равна 0:
<cfif len(trim(form.TBCom))>
not empty. do the insert ...
</cfif>
Как в стороне, вам не нужно cfoutput
метки вокруг cfquery
, Переменные будут оцениваться автоматически. Кроме того, вы должны использовать cfqueryparam
на все пользовательские параметры ( см. ответ Майка для примера) и убедитесь, что ваши переменные находятся в области видимости, т.е. form.TBCom
не просто TBCom
,
Приведенный выше код НЕ вставит пустые значения в указанные 3 столбца (uniqueNum, comTyp и комментарии). Это вставило бы пустые строки - что не то же самое, что NULL.
Кроме того - я согласен с Ли, что правильный синтаксис должен быть:
<cfquery name="TestTBComm" datasource="TrenaTest">
INSERT INTO Comment1 (
UniqueNum,
ComTyp,
Comments )
VALUES (
'#UniqueNum#',
'#TBComV#',
'#TBCom#'
)
</cfquery>
Итак... где эти нули происходят? Если они находятся в других столбцах в БД (которые не являются частью этого запроса), это потому, что вы не вставляете их в эти столбцы, и для них задано значение "разрешить пустые значения", и у них нет значения "по умолчанию".