【问题标题】:how to query mysql database with where clause using dynamic array如何使用动态数组使用where子句查询mysql数据库
【发布时间】:2014-06-01 11:43:47
【问题描述】:

我正在尝试使用下面的 where 子句查询 mysql 数据库。

这里的popularTopicsNames是一个动态数组,它的长度和元素是变化的。

var scoreQuery=connection.query('SELECT * FROM LEADERBOARD WHERE SUBTOPIC IN ('+popularTopicsNames+')', function(err,result,fields){
if(err) throw err;
else{
    console.log(result);
    }

【问题讨论】:

    标签: mysql node.js socket.io


    【解决方案1】:

    这将以更易读的方式解决问题。

    var scoreQuery = connection.query(`SELECT * FROM LEADERBOARD WHERE SUBTOPIC IN (?)`, [popularTopicsNames],
    (err, result, _fields) => {
        if (err) {
            throw err;
        } else {
            console.log(result);
        }
    });
    

    【讨论】:

      【解决方案2】:

      如果它只是一个数组,那么你试图将它作为一个字符串传递,这是行不通的。

      试试

      var scoreQuery = connection.query("SELECT * FROM LEADERBOARD WHERE SUBTOPIC IN ('" + popularTopicsNames.map(mysql.escape).join("','") + "')",
          function(err, result, fields) {
              if (err) {
                  throw err;
              } else {
                  console.log(result);
              }
          });
      

      【讨论】:

      • 括号内缺少开头和结尾的单引号。如果没有它们,您最终会得到数组中超过 1 个项目的无效 SQL。示例:SELECT * FROM LEADERBOARD WHERE SUBTOPIC IN (foo','bar)
      • 另外,如果主题名称是用户提交的,那么应该先对其进行适当的转义,以防止SQL注入攻击。
      • 我认为你需要类似popularTopicsNames.map(mysql.escape).join("','") 的东西。
      • @mscdex 你是对的,因为转义返回值用引号括起来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      相关资源
      最近更新 更多