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

标签 mysql sql node.js

为了允许用户使用他们的 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/

相关文章:

mysql - 删除来自另一个表的值匹配但未使用的 SQL 行

node.js - http.get 带空格的 url

node.js - 匹配 Mongoose 数组中指定的所有值

php - Codeigniter:获取页面上的所有查询

php - Symfony 2 连接不工作主义和 MySQL

java - `SELECT ... FOR UPDATE`锁什么时候释放?

mysql - 如何获取具有第二高值的所有行

mysql - 双连接的结果太多

MySQL:在单个 Cell 中读取大数据还是在多个 Cell 中读取较小数据更快?

javascript - 如何使用这些异步函数在 JavaScript 中处理 MySQL 查询?