首页 > 解决方案 > 用于 NodeJS 的 Mysql 未在查询中扩展数组

问题描述

我正在使用 NodeJS 和 npm 的mysql包。我无法按 ID 从数据库中选择特定行。我正在使用一个简单的 WHERE id IN (...) 查询,并将 ids 作为数字数组传递。

根据文件,

数组变成列表,例如 ['a', 'b'] 变成 'a', 'b'

所以我编写了这段代码来调试它生成的 SQL:

  console.log(ids);
  console.log(this.connection.format(
    "SELECT `invitations`.* FROM `invitations` WHERE `invitations`.`id` IN (?)",
    ids
  ));

我希望首先看到一个 id 列表,然后是这些 id 在查询的 IN 部分中的 SQL 语句。

但是,查询中只存在第一个 id:

console.log tests/fakers/InvitationFaker.ts:70
[ 207, 208 ]

console.log tests/fakers/InvitationFaker.ts:71
SELECT `invitations`.* FROM `invitations` WHERE `invitations`.`id` IN (207)

为什么查询看起来不像这样:

... WHERE `invitations`.`id` IN (207, 208)

?

标签: mysqlnode.js

解决方案


尝试将 id 转换为字符串,在 id 之间使用 ","

this.connection.format(
    "SELECT `invitations`.* FROM `invitations` WHERE `invitations`.`id` IN (?)",
    ids.join(",")
  ));

推荐阅读