确定WHERE语句的哪个部分失败

mac*_*osh 3 php mysql sql where conditional-statements

假设我有一个这样的SQL语句来检查用户登录:

SELECT * FROM users 
WHERE username='test@example.com', password='abc123', expire_date>=NOW();
Run Code Online (Sandbox Code Playgroud)

SQL中是否有一种方法可以确定哪些WHERE条件失败,而不必将每个条件分成自己的查询并单独测试?

在此特定示例中,它将允许开发人员准确地告诉用户他们尝试登录失败的原因.

出于我的目的,我正在使用PHP/MySQL.

Chr*_*fer 6

好吧,你可以做的一件事是改变你的查询,使它只匹配用户名.然后在代码中检查密码和到期日期,返回适当的错误.

另外,我希望您的示例查询是一种简化; 当然,您应该对您的密码进行腌制/加密/散列,并且您应该包含限制在特定时间范围内失败尝试次数等的内容,等等......

就您的实际问题而言(与您正在寻找的结果相反),没有办法从where子句获取该信息.你能做的最接近的是:

SELECT *,
    CASE WHEN Password = 'asdf' THEN 1 ELSE 0 END AS IsPasswordMatch,
    CASE WHEN Expiration >= NOW() THEN 1 ELSE 0 END AS IsActiveAccount
FROM Users
WHERE Username = 'user'
Run Code Online (Sandbox Code Playgroud)