我有一个用户密码系统,我需要1)根据存储在数据库中的两个潜在密码检查用户密码,2)如果找到匹配,请确保用户电子邮件与存储在行中的用户电子邮件相匹配匹配的密码。
这是当前的mysql我必须在登录时拉出唯一用户:
$sql = "SELECT * FROM users WHERE email='$u' AND password='$p' OR password_two='$p'";
这适用于绝大多数情况,但在多个用户具有相同密码时失败 - 例如,如果多个用户拥有密码“123456”。我假设这是因为我上面的AND OR设置不正确。
我将sql查询更新为以下语句:
$sql = "SELECT * FROM (SELECT * FROM users WHERE password='$p' OR password_two='$p') WHERE email = '$u' ";
此查询不适用于任何用户 - 有人可以帮我识别查询出错的位置吗?
答案 0 :(得分:4)
如果我正确理解了这个问题,那么你正在寻找:
$sql = "SELECT * FROM users WHERE email='$u' AND (password='$p' OR password_two='$p')";
没有括号,它被解释为:
$sql = "SELECT * FROM users WHERE (email='$u' AND password='$p') OR (password_two='$p')";