Node.js:MySQL多变量查询

Node.js:MySQL多变量查询,mysql,node.js,Mysql,Node.js,我正在编写一个node/express应用程序,使用mysql作为数据库 前面有一个问题,我还不能真正弄清楚:在一条路线上有可能进行多个查询吗 然而,我的问题是,我想在数据库查询中使用多个变量,如下所示,这是行不通的 router.get('/:route_name', (req, res) => { const route_name = req.params.route_name; const route_name_join = req.params.route_name+".

我正在编写一个node/express应用程序,使用mysql作为数据库

前面有一个问题,我还不能真正弄清楚:在一条路线上有可能进行多个查询吗

然而,我的问题是,我想在数据库查询中使用多个变量,如下所示,这是行不通的

router.get('/:route_name', (req, res) => {

  const route_name = req.params.route_name;
  const route_name_join = req.params.route_name+".comp_id";
  const queryhelper = [route_name, route_name_join];
  const dbquery = "SELECT * FROM ? INNER JOIN users ON ? = users.id;";

  sqldb.query(dbquery, queryhelper, function (err, result, fields) {
    if (err) throw err;

    res.render('categories/category',{
      items : result
    });

    console.log(JSON.stringify(result));
  });
我期待着,例如,在

…/类别/客户

在customers.comp\u id=users.id;上选择*FROM customers internal JOIN users

如果我在dbquery中准确地输入了它,它确实可以工作,但是当我使用“?”时,我会得到一个错误,我的mysql语法中有一个错误

从“customers.comp_id”=users.id上的“customers”内部加入用户中选择*


我假设customers.comp_id有问题,但我就是不知道如何解决它。

您需要为此执行字符串替换。参数只能用于表达式-它们将被作为文本提供的值替换。不能使用参数提供表名或列名

我们也要这样做:

const dbquery = `SELECT * FROM ${route_name} INNER JOIN users ON ${route_name_join} = users.id;`;

如果这些变量来自用户输入,请确保在查询中使用它们之前将其列入白名单,以防止SQL注入。

不能将参数用于表名和列名,只能用于表达式。通常,如果需要动态替换表名或列名,这通常是一个信号,表明您的数据库设计有问题。嗨,Barmar,您的回答对我有用,非常感谢!你的建议可能是对的,我的数据库设计可能是个问题,因为我没有经验。我现在一定会想出更好的解决办法。