执行UPDATE时出错

时间:2014-06-08 13:41:48

标签: 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);
        });
    [...]
});

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

如果我将代码更改为此;

?

...然后更新运行没有错误,并反映在数据库中。如果我run_db_insert("UPDATE users_table SET clientid = ? WHERE user = '" + userid + "'", [client.id], function(){ console.logclient.id,则控制台会正确反映这些值。

我的userid功能如下;

run_db_insert

使用多个'?'执行SELECT或INSERT查询时没有问题占位符(稍微修改过的函数,在该函数的第11行中有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(); }; ,然后在回调函数中返回),但我发现UPDATE没有正确地分配我传入的所有参数它。

1 个答案:

答案 0 :(得分:2)

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

尝试更改:

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

为:

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