我有一个简单的Node.js应用程序,它执行以下查询。
select * from User where userid in (?)
我从客户端接收到一个JSON数组,如何在这个查询中使用这些用户ID?我尝试了以下两种方法: 1. 直接使用,但是不起作用。 2. 转换成JavaScript数组,还是不行。
WHERE tto.tariff_id =?AND so.service_opt_id IN(?)
结束,这些是唯一的问号。 - Daniele Crucianimysql2
进行交互。参数已经以数组的形式传递,因此您的第一个参数需要是一个数组 [[1,2,3]]
。select * from User where userid in (?)
const mysql = require('mysql2/promise');
async function main(){
let db = await mysql.createPool(process.env.MYSQL_URL);
let SQL = 'select * from User where userid in (?)';
let [res, fields] = await db.query(SQL, [[1,2,3]]);
console.log(res)
return res;
}
main().then(() => {process.exit()})
重新审视此问题,原始方法是有效的,但有一些注意事项。如果您唯一需要转义的参数是IN子句中的参数,则必须将其指定为嵌套数组; 类似于:[['usrId1','usrId2','usrIdN']]。这是因为非转义功能期望一个数组,用相应的数组元素替换每个“?”。因此,如果您想用数组替换唯一的“?”,那么该数组应该是传递的所有参数的第一个元素。如果您有多个“?” ,语法更直观,但最终一致且相同; 在这种情况下,您可以使参数类似于:['myOtherArgument1','myOtherArgument2',['usrId1','usrId2','usrIdN'],'myOtherArgument3']
// 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`
});
更新:请参见此答案。这是问题所要求的正确方法。
我尝试过的方法有:
两种方法都有效。然后,我改变了我的逻辑,采用更好的方法,现在我不再需要“in”子句了。
var array = [];
array.push(value);
array.push(value);
array.push(value);
array.push(value);
然后使用数组作为参数,应该进行绑定。
// 用逗号获取查询字符串数据 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(rows); });
let val = ["asd","asd"]
let query = 'select * from testTable where order_id in (?)';
connection.query(query, [val], function (err, rows) {
});