1

$_POSTを使用して値を取得し、DBに挿入するPHPコードがあります。CU00主キーを表すため、などを除くすべてのフィールドは入力ベースです。

ここで、ユーザーが1行だけ入力するとします。

$ sql="INSERT INTO weekly
VALUES
 ('$_POST[uactual]','$_POST[utarget]','CU001','$a1','$_POST[ucomment]',NOW())
,('$_POST[uactual2]','$_POST[utarget2]','CU002','$a2','$_POST[ucomment2]',NOW())
,('$_POST[uactual3]','$_POST[utarget3]','CU003','$a3','$_POST[ucomment3]',NOW())
,('$_POST[dactual]','$_POST[dtarget]','CD001','$b1','$_POST[dcomment]',NOW())
,('$_POST[dactual2]','$_POST[dtarget2]','CD002','$b2','$_POST[dcomment2]',NOW())
,('$_POST[dactual3]','$_POST[dtarget3]','CD003','$b3','$_POST[dcomment3]',NOW())
,('$_POST[iactual]','$_POST[itarget]','CI001','$c1','$_POST[icomment]',NOW())
,('$_POST[iactual2]','$_POST[itarget2]','CI002','$c2','$_POST[icomment2]',NOW())
,('$_POST[iactual3]','$_POST[itarget3]','CI003','$c3','$_POST[icomment3]',NOW())
,('$_POST[ractual]','$_POST[rtarget]','CR001','$d1','$_POST[rcomment]',NOW())
,('$_POST[ractual2]','$_POST[rtarget2]','CR002','$d2','$_POST[rcomment2]',NOW())
,('$_POST[ractual3]','$_POST[rtarget3]','CR003','$d3','$_POST[rcomment3]',NOW())";

SQLテーブル

ACTUAL|TARGET|KEY |SIGNAL |TIME 
NULL    NULL  CU001 NULL   00:00
NULL    NULL  CU002 NULL   00:00
NULL    NULL  CU003 NULL   00:00
NULL    NULL  CU004 NULL   00:00
100      200  CU005  300   00:00

信号のある行だけを選択する選択をしたい。しかし、私がするとき:

   SELECT *
    FROM TABLE
    WHERE 
    'signal' IS NOT NULL

すべての行が返されます。これは、テーブルにNULL値がないかのようです。

4

3 に答える 3

3
   SELECT *
    FROM TABLE
    WHERE 
    signal IS NOT NULL

'signal'確かにである単なる文字列リテラルですNOT NULL。あなたはおそらく'の代わりに`を意味しました。

于 2013-03-19T22:48:26.663 に答える
0

NULLを挿入していません。せいぜい空の文字列を挿入しています。

また、入力の検証を使用する必要があります。

于 2013-03-19T22:49:14.577 に答える
0

空の文字列をDBに入れています。

これを行う:

(empty($_POST['uactual']) ? 'NULL' : '\'' . $_POST['uactual'] . '\'')

すべての$_POST変数について。そうすれば、NULL値が存在することを確認できます。

これを行わないでください:$_POST[uactual]!PHPは最初に定義されたvalを検索します!$_POST['uactual']常に'を使用してください!

また、選択が間違っています。「ではない」。信じられない場合は、そのようなクエリを実行してください。

SELECT 'signal' FROM TABLE

正解です:

SELECT `signal` FROM TABLE or
SELECT signal FROM TABLE

これにより、`signal`列ではなく文字列'signal'が返されます。

 WHERE 
    'signal' IS NOT NULL

これは常になりますtrue!これが、データ全体を返す理由です。次に、2つの間違いを犯しました:]データの挿入と選択。

于 2013-03-19T22:57:29.110 に答える