作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设我有一个检查用户登录的 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 - 确定 WHERE 语句的哪些部分失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1412195/
我是一名优秀的程序员,十分优秀!