【问题标题】:node js mysql query where id = ARRAY?节点 js mysql 查询其中 id = ARRAY?
【发布时间】:2015-11-27 12:16:38
【问题描述】:

我正在努力获取列出的用户的数据,并且我有一系列用户,例如

var result_user_id = [
  {
    "id": 19
  },
  {
    "id": 20
  }
];

我尝试了类似的东西

connection.query( 
   "select * from `contents` where `user_is` IN "+ result_user_id, 
   function( err_user, result_user ) {

   }
);

但无法获取相关数据。 如何在节点 js 中做到这一点。

【问题讨论】:

  • 你发布的数组是result_user_id的值吗?
  • 是的,采用这种格式 [ { "id": 19 }, { "id": 20 } ] .

标签: javascript mysql node.js


【解决方案1】:

我知道这个问题有点老了,但我通过谷歌搜索找到了它并偶然发现了同样的问题。这是我找到的最简单的解决方案:

    var result_user_id = [
  {
    "id": 19
  },
  {
    "id": 20
  }
];

var result_array = [];

  for (var i = 0; i < result_user_id; i++) {
      result_array[i] = result_user_id[i].id;
    }

connection.query( "select * from contents where user_is IN (?)", [result_array], function( err_user, result_user ) { });

【讨论】:

    【解决方案2】:
    var o =[
      {
        "id": 19
      },
      {
        "id": 20
      }
    ];
    var arr = o.map( function(el) { return el.id; });
    connection.query( "select * from `contents` where `user_is` IN ("+ connection.escape(arr)+")", function( err_user, result_user ) { });
    

    可以使用 connection.escape()、mysql.escape() 或 pool.escape() 对输入进行清理。请参考this 清理输入。

    【讨论】:

    • $ 未在节点 js 中定义。 :(
    • 不要在没有字符串清理的情况下将字符串连接到查询
    • @wasserholz 我已更改代码以解决此问题。如果需要任何修改,请告诉我或进行编辑。
    【解决方案3】:

    你不能直接把变量result_user_id 放到sql 中。尝试类似:

    for (var i=0, len=result_user_id.length; i<len; i++){
       userIds += result_user_id[i].id + ",";
    }
    

    然后在您尝试执行的 sql 中使用 userIds 而不是 result_user_id。

    【讨论】:

      【解决方案4】:

      以下是使用 es6 语法的方法:

      const inClause = ids.map(id=>"'"+id+"'").join();
      
      const query =  `SELECT * FROM docs d WHERE d.id IN (${inClause})`;
      

      【讨论】:

        【解决方案5】:

        如果您希望利用安全转义 (?),您可以执行以下操作:

         connection.query('SELECT FROM `contents` WHERE `user_is` IN (' + 
           Array(result_user_id.length + 1).join('?').split('').join(',') + ')', result_user_id.map(p => p.id), function(err, result_user){});
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-02
          • 1970-01-01
          • 2015-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-21
          相关资源
          最近更新 更多