以前从未遇到过这种情况,只是无法理解其背后的推理。
我有一个问题:
SELECT * FROM (`user`) WHERE `user_email` = 0 AND `user_pass` = 0
这显示了所有行,即使我已经将查询读作'显示所有在user_email和user_pass中都包含整数0的记录。我可以通过确保从PHP传递字符串数据来解决这个问题,但是我有点完美主义者并想知道为什么会发生这种情况以便更好地理解。
有人有什么想法吗?尝试搜索谷歌无济于事。谢谢您的帮助! :)
谢谢!
答案 0 :(得分:1)
我猜您的字段user_email和user_pass是varchar字段。因此,可以将0更改为''
(两个单引号)
答案 1 :(得分:1)
您输入整数0,因此它将您的varchar字段user_email
和user_pass
转换为int。实际上,如果非空字符串上没有前导号,则它将被转换为0.例如,
SELECT 'aaaa' = 0; // returns 1 - true
SELECT '1aaa' =0; // 0 -false
SELECT '1aaa' =1 ;// 1 -true
校正。根据{{3}},它们将被比较为浮点数,而不是整数。
在所有其他情况下,参数被比较为浮点(实数)
答案 2 :(得分:0)
我认为我以前从未见过有人使用括号声明表名。你做到了吗:
SELECT * FROM `user` WHERE `user_email` = 0 AND `user_pass` = 0
答案 3 :(得分:0)
我不认为user
周围需要括号。另外,尝试在两个零周围加上引号,这可能会导致问题。
答案 4 :(得分:0)
由于user_email和user_pass将成为字符串类型,我认为应该这样做:
SELECT * FROM user WHERE user_email = '0' AND user_pass = '0'