1

最初に NULL をチェックしようとしています。値が NULL の場合はINSERT. しかし、それは起こっていることではありません。フォーム フィールドに何も入力していないにもかかわらず、コードが NULL レコードを挿入しています。まるで存在しないものを認識しているかのようです。

<cfoutput>
<cfif form.TBCom is not ""> 
    <cfquery name="TestTBComm" datasource="TrenaTest">
        INSERT INTO Comment1 (
            UniqueNum,
            ComTyp,
            Comments )
        SELECT 
           '#UniqueNum#',
           '#TBComV#',
           '#TBCom#'
    </cfquery>
</cfif>
</cfoutput>
4

3 に答える 3

6

一般的な文字列をテストする場合、CFではNULLチェックが適用されないという点で、前の回答は正しいです。長さまたは値のいずれかをテストします。

そのクエリは私を怖がらせたので、完全な例が必要だと思いました。ユーザーがデータを提供するクエリのすべてのフィールドが、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() 関数の結果を反転する "!" に注意してください。

于 2012-08-02T14:55:01.180 に答える
2

フォームフィールドが空のときに挿入をスキップする場合は、trim()最初に挿入をスキップして長さを確認します。次に、長さが0の場合は、挿入をスキップします。

 <cfif len(trim(form.TBCom))>
      not empty. do the insert ...
 </cfif>

余談ですが、cfoutputの周りにタグは必要ありませんcfquery。変数は自動的に評価されます。cfqueryparamまた、ユーザーが指定したすべてのパラメーターを使用する必要があり(例についてはMikeの回答を参照)、変数のスコープを設定する必要があります。つまり、を使用するform.TBComだけではありませんTBCom

于 2012-08-01T18:56:46.537 に答える
0

上記のコードは、指定された 3 つの列 (uniqueNum、comTyp、およびコメント) に null を挿入しません。空の文字列が挿入されますが、これは NULL とは異なります。

また、適切な構文は次のようにする必要があるという Leigh に同意します。

   <cfquery name="TestTBComm" datasource="TrenaTest">
        INSERT INTO Comment1 (
            UniqueNum,
            ComTyp,
            Comments )
        VALUES (
           '#UniqueNum#',
           '#TBComV#',
           '#TBCom#'
           )
    </cfquery>

それで...これらのヌルはどこで発生していますか?それらがDBの他の列にある場合(これはこのクエリの一部ではありません)、それらの列に挿入しておらず、「nullを許可」に設定されており、「デフォルト」値がないためです。

于 2012-08-01T22:06:08.040 に答える