【问题标题】:Make MySQL's ORDER BY dynamic in node.js在 node.js 中使 MySQL 的 ORDER BY 动态化
【发布时间】:2017-01-30 05:50:17
【问题描述】:

我想在 node.js 的 mysql 查询中使 ORDER BY 动态化。但它不起作用。我console.log multiQuery 变量,一切看起来都很完美,但是运行时它根本不起作用。这就是我所拥有的:

var order,
    multiQuery;
if(req.query.o){
    order = req.query.o;
}else{
    order = "views";
}
multiQuery = 'SELECT COUNT(Category) AS Count FROM posts;';
//PROBLEM LIES HERE IN THE SECOND ONE
multiQuery += 'SELECT ID, Title, Img_path, Category, Views FROM posts WHERE Category = ' + connection.escape(category) + ' ORDER BY' + connection.escape(order) + 'DESC LIMIT ' + start_from + ', 15;';
connection.query(multiQuery, function(err, result){
});

【问题讨论】:

    标签: mysql node.js node-mysql


    【解决方案1】:

    这不起作用:

    SELECT foo FROM bar ORDER BY 'baz';
    

    这确实有效:

    SELECT foo FROM bar ORDER BY baz;
    

    您是否尝试删除 connection.escape 添加的引号?

    试试这个:

    function escapeSansQuotes(connection, criterion) {
      return connection.escape(criterion).match(/^'(\w+)'$/)[1];
    }
    

    然后使用escapeSansQuotes(connection, order) 而不是connection.escape(order)

    【讨论】:

      【解决方案2】:

      检查您是否在连接对象中启用了多查询。

      http://nickolayconsulting.com/node-js-and-multiple-sql-calls-in-one-query/

      出于安全考虑,默认情况下禁用对多个语句的支持 原因(如果值不是,它允许 SQL 注入攻击 正确逃脱)。要使用此功能,您必须为您的 连接:

      var connection = mysql.createConnection({multipleStatements: true});
      

      【讨论】:

        【解决方案3】:

        尝试为每个标记使用适当的间距

        //PROBLEM LIES HERE IN THE SECOND ONE
        multiQuery += 'SELECT ID, Title, Img_path, Category, Views 
                   FROM posts WHERE Category = ' + connection.escape(category) + 
                   ' ORDER BY ' + connection.escape(order) + 
                   ' DESC LIMIT ' + start_from + ', 15;';
        

        【讨论】:

          猜你喜欢
          • 2019-12-13
          • 2012-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多