如何选择哪个列等同于PHP的假(例如,当在php !$myVar
中评估为true时)。
到目前为止,我有:
SELECT * from users
WHERE firstname = '0'
OR firstname = ''
OR firstname IS NULL;
我认为这涵盖了大部分php的假设,但剩下的主要问题是......那么任何数量的空间呢?我是否需要现在对\ s +进行某种正则表达式检查。以上标签或新行字符。或者是否有更简单的方法来处理所有这些?
修改
列数据类型为 char(32)
答案 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:您唯一可行的选择是选择所有内容,并检查您的脚本是否为假。