执行UPDATE时出错

Sco*_*ard 5 mysql node.js

我在使用节点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);
        });
    [...]
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,这引起了一个错误; 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

数据未反映在数据库中.出于某种原因,该代码不会出现被拿起第二个问号占位符,因此它没有传递正确的值(即它试图找到userid?).

如果我将代码更改为此;

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

...然后更新运行没有错误,并反映在数据库中.如果我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();
};
Run Code Online (Sandbox Code Playgroud)

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

msc*_*dex 2

我认为你的问题是你将查询替换值包装在另一个数组中,因此[[client.id, userid]]被传递到mysql.query().

尝试改变:

mysql.query(sql, [args], function(err){
Run Code Online (Sandbox Code Playgroud)

到:

mysql.query(sql, args, function(err){
Run Code Online (Sandbox Code Playgroud)