nodejs mysql中多个占位符的一个值
要允许用户使用他们的nodejs mysql中多个占位符的一个值,mysql,sql,node.js,Mysql,Sql,Node.js,要允许用户使用他们的用户名或电子邮件或电话号码登录,我使用以下查询: 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.
用户名
或电子邮件
或电话号码
登录,我使用以下查询:
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
),而无需重复键入
但是,我在文档中找不到关于它的任何信息。您可以使用:
旁注:原始查询有一个预相关性问题,这使得它非常不安全。实际上,这将授权用户使用其用户名或电子邮件登录而不检查其密码,因为:
username=? OR email=? OR phonenumber=? AND password=?
在句法上等同于:
(username=? OR email=?) OR (phonenumber=? AND password=?)
这是因为逻辑运算符或
的预设值低于和
。您需要用括号括住或ed条件,如下所示:
(username=? OR email=? OR phonenumber=?) AND password=?)
令人惊奇的是,像这样使用IN操作符对我来说是新的。谢谢你的旁注。宝贵的信息。欢迎@Dohab,乐于帮助@多哈布:你不接受答案有什么特别的原因吗?是的,当然,很抱歉,我刚刚测试了这个,我得到了一些不想要的结果。当phonenumber为0(在数据库中)时,即使用户名和电子邮件不等于?占位符,绝对是。使用这种语法,您需要绑定变量两次。
(username=? OR email=? OR phonenumber=?) AND password=?)