我正在尝试在 pg-promise 的参数数组中传递参数数组,如建议的那样pg-promise 文档 https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#passing-arrays.
db.any("SELECT fieldname FROM table WHERE fieldname = $1 AND fieldname2 IN ($2)",
[1,[[1730442],[1695256]],[487413],[454336]]])
.then(function (data) {
console.log("DATA:", data); // print data;
})
.catch();
但它不起作用,我返回了“参数列表后缺少 )”错误。
或者,如果我将参数替换为:“运算符不存在:整数=整数[]]”错误:
[1,[1730442]]
当然,如果我像这样传递它,它就会起作用:
[1,1730442]
当涉及其他参数时,这是传递值数组的正确方法吗?
我还尝试删除 2 美元周围的括号,但没有成功。
我是作者pg-承诺 https://github.com/vitaly-t/pg-promise.
你的例子中有一些混乱......
您在查询中仅使用两个变量,但传入四个值:
1
[[1730442],[1695256]]
[487413]
[454336]
而且你的语法没有有效的 JavaScript,正如你正在使用的那样]
最后没有匹配的开头,所以很难理解你到底想传递什么。
那么为什么还要将所有值再次包装在数组中呢?我相信这只是您想要的整数列表IN()
陈述。
当您想使用范围内的值时WHERE IN()
,它实际上并不是您要传入的值的数组,它是一个以逗号分隔的值列表。
如果您将示例更改为以下内容:
db.any('SELECT fieldname FROM table WHERE fieldname = $1 AND fieldname2 IN ($2:csv)',
[1, [1730442,1695256,487413,454336]])
您将获得正确的注入值列表。
也可以看看:
- CSV 过滤器 https://github.com/vitaly-t/pg-promise#csv-filter
-
科尔在哪里 https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#where-col-in-values例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)