执行UPDATE时出错

执行更新查询与节点mysql2模块有点麻烦。 我准备查询使用'?' 占位符,然后像这样传递值;

 socket.on('connection', function(client){ [...] client.on('userjoin', function(username, userid){ run_db_insert("UPDATE users_table SET clientid = ? WHERE user = ?", [client.id, userid], function(){ console.log(client.id + ' <=> ' + userid); }); [...] }); 

不幸的是,这是一个错误。 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 ''12345678' WHERE userid = ?' at line 1

数据不会反映在数据库中。 出于某种原因,代码似乎没有拿起第二个问号占位符,所以它没有传递正确的值(即它试图find?userid名)。

如果我把这个代码改成这个

 run_db_insert("UPDATE users_table SET clientid = ? WHERE user = '" + userid + "'", [client.id], function(){ 

…然后更新运行没有错误,并反映在数据库中。 如果我console.logclient.iduserid ,控制台正确地反映这些值。

我的run_db_insert函数如下;

 function run_db_insert(sql, args, callback){ var mysql = svc_mysql2.createConnection({ // connection details }); mysql.connect(function(err){ if(err){ console.log('Error connecting to DB: ' + err); } }); mysql.query(sql, [args], function(err){ if (err){ console.log(err); return; } callback(); }); mysql.end(); }; 

我没有问题使用多个'?'执行SELECT或INSERT查询 占位符(具有稍微修改的函数, result该函数的第11行,然后在callback中返回),但我发现UPDATE不正确地分配我传递给它的所有参数。

我认为你的问题是你正在包装你的查询replace值在另一个数组,所以[[client.id, userid]]被传递给mysql.query()

尝试改变:

 mysql.query(sql, [args], function(err){ 

至:

 mysql.query(sql, args, function(err){