javascript - Postgresql 绑定一个变量的变量
问题描述
通过阅读此处的其他帖子,我了解错误是什么,我只是不知道如何在我的用例中修复它。我正在使用 for 循环来构建一个查询,它将多行插入到我的数据库中。
const id = req.body.user_id;
const data = req.body.data;
let queryString = '';
let venue_ids = ``;
for (let i = 2; i < data.length + 2; i++) {
if (i === data.length + 1) {
queryString += `($1, $${i})`;
venue_ids += `${data[i - 2].id}`;
} else {
queryString += `($1, $${i}), `;
venue_ids += `${data[i - 2].id}, `;
}
}
我可以记录我的字符串,我得到queryString= ($1, $2), ($1, $3), ($1, $4), ($1, $5), ($1, $6), ($1, $7), ($1, $8), ($1, $9), ($1, $10), ($1, $11)
and venue_ids = 10, 9, 8, 7, 6, 5, 4, 1, 3, 2
。
接下来我尝试进行查询:
let sqlText = `INSERT INTO user_matches (user_id, venue_id) VALUES ${queryString}`;
pool
.query(sqlText, [id, venue_ids])
.then((response) => {
res.send(response.rows);
})
.catch((err) => {
console.log('Error saving venue matches', err);
});
我得到的错误是bind message supplies 2 parameters, but prepared statement "" requires 11
. 所以我看到正在发生的事情venue_ids
,当我希望它成为一个变量时,我被解释为一个变量,如果这有意义的话。
知道如何解决这个问题吗?
解决方案
binded_ids
我能够通过对整个绑定数组使用变量来解决我的问题。
let binded_ids = [id];
for (let i = 2; i < data.length + 2; i++) {
if (i === data.length + 1) {
queryString += `($1, $${i})`;
binded_ids.push(data[i - 2].id);
} else {
queryString += `($1, $${i}), `;
binded_ids.push(data[i - 2].id);
}
}
然后我的查询:
let sqlText = `INSERT INTO user_matches (user_id, venue_id) VALUES ${queryString}`;
pool
.query(sqlText, binded_ids)
.then((response) => {
res.send(response.rows);
})
.catch((err) => {
console.log('Error saving venue matches', err);
});
推荐阅读
- php - PHP:找不到套接字传输“袜子”
- struts2 - Struts2 中的通配符拦截器
- reactjs - 反应和表不同步
- docker - 修改后如何升级/更新链码?
- xamarin - 接收 Xamarin 表单时的 Firebase 通知覆盖
- python - 获取两个形状文件的差异
- java - Spring Webflux 和 Keycloak JWT rest api
- go - 如何在 gofpdf 中使用图像 URL
- python - 以下是有效的 json 吗?如何在python中将其转换为dict
- python-2.7 - 当我在机器人框架中使用 IE 运行脚本时,出现以下错误:WebDriverException:消息:指定的超时类型无效:sessionId