为什么值没有插入到mysql2查询中?

时间:2019-11-02 18:39:11

标签: node.js

能告诉我吗? 为什么mysql2值替换不能在IN运算符内部使用?

我这样做,但是没有任何效果。 仅替换数组的第一个字符(数字6)

"select * from products_categories WHERE category_id IN (?)", [6,3]);

您当然可以这样: IN(?,?,?,?,?,?,?,?,?,?)[6,3,1,1,1,1,1,1,1,1,1,1,

但是那是不对的,我认为应该从数组=(

2 个答案:

答案 0 :(得分:0)

我还没有使用过,但是我的直觉告诉我们数组项根据索引映射到问号,因此在您的情况下,6会绑定到第一个?3上换一个,但是找不到。

如果我是你,我将尝试确保我的第一个数组项实际上是数组,所以我将其重写:

"select * from products_categories WHERE category_id IN (?)", [[6,3]]);

答案 1 :(得分:0)

我怀疑您在.execute()中使用了它,它是准备好的语句“如果从未执行过,则先准备” + execute的缩写。尽管api与.query()非常相似,但最大的区别是,在准备语句的情况下,仅在执行时发送参数,而与.query()不同的是,整个查询文本均用客户端上的所有参数进行内插。因此,由于原始查询文本中有多个占位符,因此您需要发送精确数量的参数(在您的示例中为一个?)。整个[6,3,1,1,1,1,1,1,1,1,1]被当作一个参数,并以"6,3,1,1,1,1,1,1,1,1,1"字符串的形式发送到服务器(因为在准备步骤中,该参数很可能被服务器报告为VAR_CHAR)

解决方案是1)使用.query()并在客户端上进行插值,或者2)动态构建足够的?并为不同数量的IN参数准备不同的PS