为了允许用户使用他们的 username
或 email
或 phonenumber
登录,我正在使用此查询:
res.post('/api/userlogin', function(req, res){
connection.query(
'SELECT * FROM users WHERE username=? OR email=? OR phonenumber=? AND password=?',
[req.body.loginfield, req.body.loginfield,req.body.loginfield, req.body.password],
function(){
...
...
//res.send
});
});
我相信这就是 mysql 的工作方式,但我认为也许有一种方法可以只对多个占位符使用一个值 (req.body.loginfield
) 而无需重复输入。
不过我在文档中找不到任何相关信息。
最佳答案
您可以使用 the IN
operator :
SELECT *
FROM users
WHERE ? IN (username, email, phonenumber) AND password = ?
旁注:您的原始查询有一个先行问题,这使得它非常不安全。事实上,这将授权用户使用他们的用户名或电子邮件登录而不检查他们的密码,因为:
username=? OR email=? OR phonenumber=? AND password=?
在语法上等同于:
(username=? OR email=?) OR (phonenumber=? AND password=?)
这是因为逻辑运算符 OR
的优先级低于 AND
。您需要用括号将 OR
条件括起来,如下所示:
(username=? OR email=? OR phonenumber=?) AND password=?)
关于mysql - nodejs-mysql中多个占位符的一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57948746/