MySQL选择列为假的位置

时间:2016-10-21 17:01:28

标签: php mysql

如何选择哪个列等同于PHP的假(例如,当在php !$myVar中评估为true时)。

到目前为止,我有:

SELECT * from users 
WHERE firstname = '0' 
   OR firstname = ''
   OR firstname IS NULL;

我认为这涵盖了大部分php的假设,但剩下的主要问题是......那么任何数量的空间呢?我是否需要现在对\ s +进行某种正则表达式检查。以上标签或新行字符。或者是否有更简单的方法来处理所有这些?

修改

列数据类型为 char(32)

2 个答案:

答案 0 :(得分:1)

在这种情况下,空格将被视为某种东西,并且所有特殊字符(如换行符)也将如此。这些都不算虚假。真正的问题是为什么你选择以MySQL的方式存储东西。在MySQL中存储布尔值的常规方法是使用0或1.这可以确保一致性,这意味着您不必为所有查询执行类似的操作。

您的查询将起作用,但firstname = NULL也有效。

答案 1 :(得分:0)

还做了一些调查。 http://php.net/manual/en/language.types.boolean.php是一个很好的起点。检查您在数据中可能存在的错误。

但是,我希望这只是为了清理数据。构建某些东西要求你查询PHP认为错误的东西似乎是个坏主意......看看这些测试结果。

我在MySQL表中插入以下内容,然后用PHP查询数据库并检查结果是否被视为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:您唯一可行的选择是选择所有内容,并检查您的脚本是否为假。