mysql nodejs中的IN子句

时间:2017-01-30 11:58:11

标签: mysql node.js

我有一个简单的nodejs应用程序,它执行以下查询。

select * from User where userid in (?)

我得到的用户ID是从客户端发送的JSON数组。我如何在这个选择查询中使用它?我试过了  1.本身但不起作用。  2.将其转换为Javascript数组,无法正常工作

8 个答案:

答案 0 :(得分:8)

如果您使用的节点模块如mysql,则第二种方法应该有效。

var query=select * from User where userid in (?);
var data=['a','b','c'];
var queryData=[data];

conn.query(query, queryData, function (err, results) {})

根据documentation,“阵列变成列表,例如['a','b']变成'a','b'”。所以这种方法应该有效(我已经实际使用过它了。)

答案 1 :(得分:1)

重温这一点,因为问题的原始方法是有效的,但有一些警告。如果您唯一的转义参数是IN子句中的参数,那么您必须将其指定为嵌套数组;例如:[[' usrId1',' usrId2',' usrIdN']]。这是因为取消转义的功能需要一个阵列,取代每个'?'与相应的数组元素。所以,如果你想更换你唯一的'?'使用数组,该数组应该是传递的所有参数的第一个元素。如果您有多个'?',语法更直观,但最终一致且相同;在这种情况下,您可以将您的论点类似于:[' myOtherArgument1',' myOtherArgument2',[' usrId1',' usrId2', ' usrIdN'],' myOtherArgument3']

答案 2 :(得分:0)

你可以这样做:     select * from user where userid in(?,?,?,?)

var array = []; 
array.push(value);
array.push(value);
array.push(value);
array.push(value);

然后使用array作为应该绑定的参数。

答案 3 :(得分:0)

  1. 将JSON数组展开为所需格式的字符串。使用' +'将其与查询连接。 (注意SQL注入)
  2. 动态添加'?'使用持有用户ID的JSON数组的长度。然后使用该数组提供用户ID。
  3. 这是我试过的两种方法。两者都有效。然后我用更好的方法改变了我的逻辑,所以现在我不需要在'条款不再。

答案 4 :(得分:0)

这样的事可以奏效!

// get your possible IDs in an array
var ids = [1,2,3,4,5];

// then, create a dynamic list of comma-separated question marks
var tokens = new Array(ids.length).fill('?').join(',');

// create the query, passing in the `tokens` variable to the IN() clause
var query = `SELECT * FROM User WHERE userid IN (${tokens})`;

// perform the query
connection.query(query, ids, (err, data) => {
   // do something with `err` or `data`
});

答案 5 :(得分:0)

//用逗号获取查询字符串数据 var param = req.params ['ids'];

//damy data var param = [1,2,3,4,5];

var array = params.split(“,”)。map(Number);

/// select查询中的注释不使用“和”(逗号和撇号)
//只需在键盘上的数字键之前先使用`(重音符)第一个键

con.query(`select * from TB_NAME where COL IN(?)`,[array],(err,rows,fields)=>{

res.json(行); });

答案 6 :(得分:0)

let val = ["asd","asd"]
let query = 'select * from testTable where order_id in (?)';
connection.query(query, [val], function (err, rows) {
});

在Node中,您需要将数组放入数组中。

答案 7 :(得分:0)

如果将数组传递给参数,则它将在节点using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { private int x, y; private int gap = 0; private int startingY = 83; private GroupBox lastGB = null; public Form1() { InitializeComponent(); button1.Text = "Details " + char.ConvertFromUtf32(8595); } 下起作用。参数已经作为数组传递,因此您的第一个参数必须是数组mysql2

[[1,2,3]]
select * from User where userid in (?)