假设我有一个这样的SQL语句来检查用户登录:
SELECT * FROM users
WHERE username='test@example.com', password='abc123', expire_date>=NOW();
SQL中是否有一种方法可以确定哪些WHERE条件失败,而不必将每个条件分成自己的查询并单独测试?
在此特定示例中,它将允许开发人员准确地告诉用户他们尝试登录失败的原因.
出于我的目的,我正在使用PHP / MySQL.
解决方法:
好吧,你可以做的一件事是改变你的查询,使它只匹配用户名.然后在代码中检查密码和到期日期,返回适当的错误.
另外,我希望您的示例查询是一种简化;当然,您应该对您的密码进行腌制/加密/散列,并且您应该包含限制在特定时间范围内失败尝试次数等的内容,等等……
就您的实际问题而言(与您正在寻找的结果相反),没有办法从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'
标签:php,mysql,sql,where,condition
来源: https://codeday.me/bug/20190717/1485219.html