gpt4 book ai didi

mysql - nodejs-mysql中多个占位符的一个值

转载 作者:行者123 更新时间:2023-11-29 05:47:50 25 4
gpt4 key购买 nike

为了允许用户使用他们的 usernameemailphonenumber 登录,我正在使用此查询:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com