我在使用节点
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);
});
[...]
});
不幸的是,这引起了一个错误;
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在”12345678’附近使用正确的语法’WHERE userid =?’在第1行
数据未反映在数据库中.出于某种原因,代码似乎没有拾取第二个问号占位符,因此它没有传递正确的值(即它试图找到用户ID?).
如果我将代码更改为此;
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查询没有问题.占位符(稍微修改过的函数导致该函数的第11行然后在回调中返回),但我发现UPDATE没有正确地分配我传递给它的所有参数.