NOT NULL值的SELECT语句返回NULL值。

时间:2013-03-19 22:46:56

标签: php mysql

我有PHP代码,使用$_POST获取值,然后插入数据库。除了CU00等之外,所有字段都是基于输入的,因为它表示主键。

现在假设用户只输入一行:

$ 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 TABLE

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值。

3 个答案:

答案 0 :(得分:3)

   SELECT *
    FROM TABLE
    WHERE 
    signal IS NOT NULL

'signal'只是字符串文字,确实是NOT NULL。 你可能意味着“而不是”。

答案 1 :(得分:0)

您没有插入任何NULL。你最多插入空字符串。

此外,您应该对输入进行一些验证。

答案 2 :(得分:0)

您将空字符串放入数据库。

这样做:

(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个错误:]插入和选择数据时。