如何选择哪里的列相当于PHP的假(例如,当在PHP !$myVar
计算为真)
到目前为止,我有:
SELECT * from users
WHERE firstname = '0'
OR firstname = ''
OR firstname IS NULL;
我认为这涵盖了php的大部分错误,但剩下的主要问题是…那么任意数量的空格呢?例如,我现在是否需要对's+进行某种正则表达式检查。还有上面的制表符或换行符。还是有更简单的方法来处理这一切?
编辑:列数据类型
char (32)
空格将被计算在内,所有特殊字符(如换行符)也将计算在内。这些并不被认为是虚假的。真正的问题是为什么选择在MySQL中以这种方式存储东西。在MySQL中存储布尔值的正常方法是使用0或1。这确保了一致性,并意味着您不必为所有查询做这样的事情。
您的查询将工作,但是firstname = NULL也是有效的
做了更多的调查。http://php.net/manual/en/language.types.boolean.php是一个很好的起点。检查您所知道的数据中可能被视为错误的内容。
然而,我希望这只是为了数据清理的目的。设计一些要求您查询PHP认为是否为false的东西似乎是一个非常糟糕的主意…看看这些测试结果。我在MySQL表中插入了以下内容,然后用PHP查询DB并检查结果是否被认为是false:
考虑FALSE
INSERT into confirm (data) VALUES ('0');
INSERT into confirm (data) VALUES (00);
INSERT into confirm (data) VALUES (000);
INSERT into confirm (data) VALUES ('');
INSERT into confirm (data) VALUES (null);
INSERT into confirm (data) VALUES (' ');
INSERT into confirm (data) VALUES (' ');
INSERT into confirm (data) VALUES (' '); #tab character
考虑TRUE
INSERT into confirm (data) VALUES ('0.00');
INSERT into confirm (data) VALUES ('0.000');
INSERT into confirm (data) VALUES (0.0);
INSERT into confirm (data) VALUES (0.00);
INSERT into confirm (data) VALUES (0.000);
INSERT into confirm (data) VALUES ('00');
INSERT into confirm (data) VALUES ('false');
INSERT into confirm (data) VALUES ('null');
INSERT into confirm (data) VALUES ('[]');
INSERT into confirm (data) VALUES ('array');
INSERT into confirm (data) VALUES ('array()');
注意当在MySQL中插入多个空格时,它会将其转换为一个空的"字符串"。制表符保留(但看起来像空白)。
事实上,你可能有制表符或其他杂项空白字符被PHP认为是假的,这告诉我创建一个涵盖所有可能性的查询是很困难的。
tldr:您唯一现实的选择是选择所有内容,并检查您的脚本是否为假