执行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.log
都client.id
和userid
,控制台正确地反映这些值。
我的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){