【问题标题】:How to append values of an array to an SQL statement in Javascript如何将数组的值附加到Javascript中的SQL语句
【发布时间】:2019-06-05 03:49:09
【问题描述】:
let todo = [1, 2, 3, 4, 5, 6, 7, 8];

var stmt = "SELECT * FROM MY_USERS WHERE USER_ID = ?";

connection.query(stmt, todo, function(err, row) {
});

connection.release();

我想 SELECT * FROM MY_USERS WHERE USER_ID 可以是数组[1, 2, 3, 4, 5, 6, 7, 8]

有没有一种方法可以在不遍历数组、构造新的字符串段并将其连接到最终查询语句的情况下做到这一点?

提前谢谢大家。

编辑

我无法提前知道数组元素的确切数量,所以SELECT * FROM MY_USERS WHERE USER_ID IN (?, ?, ?, ?, ?, ? ,? ,?)不会。

【问题讨论】:

  • 您的标题显示插入,但您的查询已选择。令人困惑。
  • @slon 我刚刚将其编辑为 如何将数组的值附加到 Javascript 中的 SQL 语句
  • 可以将数组转成逗号分隔的字符串,放入 ....USER_ID IN(逗号分隔字符串)

标签: javascript sql arrays


【解决方案1】:
SELECT * FROM MY_USERS WHERE USER_ID IN (?, ?, ?, ?, ?, ? ,? ,?)

只需确保 ? 的数量与您的参数数组 in 的元素数量匹配

最后,使用 todo.length 来做类似的事情:

let todo = [1, 2, 3, 4, 5, 6, 7, 8];

var stmt = "SELECT * FROM MY_USERS WHERE USER_ID IN (";

for (let i = 0; i < todo.length; i++) {
  if (i === 0) {
    stmt += "?";
  } else {
    stmt += ", ?";
  }
}

stmt += ")";

connection.query(stmt, todo, function(err, row) {});

connection.release();

【讨论】:

  • 感谢@aaron 的回复,但是没有办法提前告诉数组的长度。
  • 使用 todo.length 然后执行类似 stmt = 'SELECT * FROM MY_USERS WHERE USER_ID IN ('; for (let i=0; i
【解决方案2】:

let todo = [1, 2, 3, 4, 5, 6, 7, 8];
var stmt = `SELECT * FROM MY_USERS WHERE USER_ID IN (${todo.join(",")})`;
console.log(stmt); // your query

您可以像这样使用模板文字,这样您就不必担心数组中的元素数量。参见Array​.prototype​.join()

let todo = [1, 2, 3, 4, 5, 6, 7, 8];

var stmt = `SELECT * FROM MY_USERS WHERE USER_ID IN (${todo.join(",")})`;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多