Php NOTNULL值的SELECT语句正在返回NULL值。
我有一段PHP代码,它使用Php NOTNULL值的SELECT语句正在返回NULL值。,php,mysql,Php,Mysql,我有一段PHP代码,它使用$\u POST获取值,然后插入到数据库中。除了CU00等,所有字段都是基于输入的,因为它表示主键 现在假设用户只输入一行: $ sql="INSERT INTO weekly VALUES ('$_POST[uactual]','$_POST[utarget]','CU001','$a1','$_POST[ucomment]',NOW()) ,('$_POST[uactual2]','$_POST[utarget2]','CU002','$a2','$_POST[u
$\u 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表
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
我得到了所有的行返回。就好像我的表中没有空值一样
SELECT *
FROM TABLE
WHERE
signal IS NOT NULL
'signal'
只是字符串文字,实际上不是NULL
。
您的意思可能是“而不是”。您没有插入任何空值。您最多只能插入空字符串
此外,您应该对输入进行一些验证。您正在将空字符串放入数据库中 这样做:
(empty($_POST['uactual']) ? 'NULL' : '\'' . $_POST['uactual'] . '\'')
对于所有$\u POST
变量。然后您可以确定将有空值
请不要这样做:$\u POST[uactual]
!PHP将首先搜索已定义的val!请务必使用“始终”$\u POST['uactual']
而且,您的选择是错误的不是。如果您不相信,请执行以下查询:
SELECT 'signal' FROM TABLE
这是正确的:
SELECT `signal` FROM TABLE or
SELECT signal FROM TABLE
这将返回字符串'signal',而不是'signal'列
WHERE
'signal' IS NOT NULL
这将始终是
正确的
!这就是它返回整个数据的原因。你在插入和选择数据时犯了两个错误:】。@saivgnesh no,'signal'
是string,而不是int。我无法在下面的帖子中添加注释,但下面的答案是错误的。字符串周围的引号是不需要的,MySQL不会将其理解为字符串,而是将其理解为列名。您正在插入字符串-您需要验证输入,并在适当的情况下将空字符串转换为空字符串。哦,插入数据时如何过滤空字符串。我在上面贴了空的()部分。sql中的“和”之间有很大的区别是字符串`是表!我在inseret bcos之前做过这件事,这是信号列,但从未工作过,我现在是否应该更改SQL我在inseret bcos之前做过这件事,这是信号列,但从未工作过,我现在是否应该更改SQL,无论您将在何处执行此操作。插入字符串应包含:NULL(不带“”)或“somestring”(带“”)或888(如果应该是数字,则不带“”。你也可以做(int)$x。然后您将确保该值为整数(如果不是数字字符串,则为0)。我会同时做(int)+empty:empty($x)?NULL:(int)$x
希望这有帮助。致命错误:调用未定义的函数int()SELECT*从信号不为NULL的表中
without'。如果像应该的那样插入空值。在其他情况下,WHERE信号!=''代码>或其中的信号!=0
或甚至一次全部
,其中信号不为空且信号!=''还有信号!=0。为了纠正我的答案,旅鼠19:)使用了一个isset。。。现在效果很好