1

我有使用 a 获取值$_POST然后插入数据库的 PHP 代码。除了 等之外,所有字段都是基于输入的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 表

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

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

做这个:

(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

这将返回字符串“信号”,而不是“信号”列。

 WHERE 
    'signal' IS NOT NULL

这将永远是true!这就是它返回整个数据的原因。然后你犯了2个错误:]在插入和选择数据时。

于 2013-03-19T22:57:29.110 回答
0

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

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

于 2013-03-19T22:49:14.577 回答