我有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值。
答案 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个错误:]插入和选择数据时。