能告诉我吗? 为什么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,
但是那是不对的,我认为应该从数组=(
答案 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