繁体   English   中英

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

[英]Inserting or Updating multiple values into a MySQL table using Node.js

我有一个表,该表的复合主键为(room_id,x_coord和y_coord)和另一列称为card_id的列。 我试图将多个记录插入到mysql数据库中。 我正在使用mysql库以及用于node.js的快速库。

如果记录不存在,我想插入一个由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:您的SQL语法有错误。 检查与您的MySQL服务器版本相对应的手册,以在第1行的'?)'附近使用正确的语法

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

首先,我相信您准备好的语句中问号的数量应与参数列表(db_values Array)的长度匹配。 其次,您不希望在update子句中的值周围加上括号。 参考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方法。 我认为该方法可能只需要一个字符串数组。

要解决此问题,您必须更改最后一个? 到要插入的列名。

因此更改此行:

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

到这行:

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

确保在以下行中的查询中用括号将[db_values]括起来也很重要:

db_connection.query(sql, [db_values], function (err, result){

那是一个给我带来麻烦的领域,因为我本来就是在没有括号的情况下尝试的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM