gpt4 book ai didi

javascript - 使用 Node.js 将多个值插入或更新到 MySQL 表中

转载 作者:行者123 更新时间:2023-11-30 21:52:16 27 4
gpt4 key购买 nike

我有一个表,它有一个复合主键(room_id、x_coord 和 y_coord)和另一个名为 card_id 的列。我正在尝试将几条记录插入到 mysql 数据库中。我正在使用 mysql 库以及 node.js 的 express 库。

如果记录不存在,我想插入一条由 room_id、x_coord、y_coord 和 card_id 组成的新记录。

另一方面,如果记录确实存在,我想将当前记录更新为新的card_id。

这是我当前代码的副本:

//previously defined: room_id, x, y, and cards[]

var i = 0;
var db_values = [];
for (var row = 0; row < y; row++){
for (var col = 0; col < x; col++){
card = cards[i];
//The following line may have a problem?
db_values.push([room_id, col, row, card['id'], card['id']]);

i++;
}
}


sql = "insert into user_card(room_id, x_coord, y_coord, card_id) values ? on duplicate key update card_id = values(?)";
//The following line may have a problem?
db_connection.query(sql, [db_values], function (err, result){
if (err){
console.log("Upsert DB ERROR: " + err);
return;
}

});

我尝试了各种代码组合,每种组合都会产生不同的错误。上面的那个会产生以下错误:

ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?)' at line 1

我在这里做错了什么,我该怎么做才能解决这个问题?

最佳答案

首先,我认为准备好的语句中问号的数量应该与参数列表(db_values 数组)的长度相匹配。其次,您不想在更新子句中的值周围加上括号。引用 https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

也许更像这样的声明会起作用:

insert into user_card(room_id, x_coord, y_coord, card_id)
values (?, ?, ?, ?)
on duplicate key update card_id=?

编辑:该查询仅适用于一张卡片。您可能想为每张卡片创建一个插入语句,这需要您在循环内构建查询。此外,它看起来像 db_values 将是一个数组的数组,您正在将它传递给带有另一个数组的 db_connection.query 方法。我想该方法可能只需要一个字符串数组。

关于javascript - 使用 Node.js 将多个值插入或更新到 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720348/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com