以前从未遇到过这个,只是无法理解其背后的原因。
我有一个疑问:
SELECT * FROM (`user`) WHERE `user_email` = 0 AND `user_pass` = 0
这显示了所有行,即使我将查询读取为“显示 user_email 和 user_pass 中都有整数 0 的所有记录”。这是为什么?
您输入整数 0,因此它将您的 varchar 字段
user_email
和 user_pass
转换为 int。实际上,如果非空字符串没有前导数字,它将被转换为 0。例如,
SELECT 'aaaa' = 0; // returns 1 - true
SELECT '1aaa' =0; // 0 -false
SELECT '1aaa' =1 ;// 1 -true
更正。根据 docs,它们将作为浮点进行比较,而不是作为整数进行比较。
在所有其他情况下,参数都作为浮点(实数)进行比较
我猜你的字段 user_email 和 user_pass 是 varchar 字段。所以也许将 0 更改为
''
(两个单引号)
我想我以前从未见过有人使用括号声明表名。你做到了吗:
SELECT * FROM `user` WHERE `user_email` = 0 AND `user_pass` = 0
我认为
user
周围不需要括号。另外,尝试在两个零周围加上引号,这可能会导致问题。
由于 user_email 和 user_pass 将是字符串类型,我认为这应该可以:
SELECT * FROM user WHERE user_email = '0' AND user_pass = '0'