更正node-mysql的UPDATE查询语法

我有一个数组“标志”,我已经改变了我的函数中的数组的值。 现在我需要更新到数据库,但我无法这样做。 我已经在桌上有了旗帜专栏。 我不知道如何更新表中variables标志的值

如果我尝试

connection.query('UPDATE visentry SET flag = "flag" ', function(err,rows,fields) { } 

它用值标志更新列标志。 如果我尝试以下

  var sql = 'UPDATE visentry SET flag= ?'; connection.query(sql,[{flag:flag}], function(err,rows,fields) { 

它给出了一个错误

错误:ER_PARSE_ERROR:您的SQL语法中有错误; 检查与您的MySQL服务器版本相对应的手册,在第1行附近使用正确的语法

任何build议,请

处理数组足够聪明:

 var sql = 'UPDATE visentry SET flag= ? WHERE row_name = ?'; var row_name = 'blah_blah_blah'; connection.query(sql,[flag, row_name], function(err,rows,fields) { }); 

如果你想使用你的第一种方法,比你应该使用一个variables,而不是你的查询中的string。 正确的语法是:

 connection.query('UPDATE visentry SET flag = "' + flag + '"', function(err,rows,fields) { }); 

但是这种方法不够安全,你可能想要逃避标志(引号和其他特殊字符)的值,并使其对SQL友好。

你可以使用这个目的的一些代码(阅读更多 – 使一个JavaScriptstringSQL友好 ):

 function mysql_real_escape_string (str) { return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) { switch (char) { case "\0": return "\\0"; case "\x08": return "\\b"; case "\x09": return "\\t"; case "\x1a": return "\\z"; case "\n": return "\\n"; case "\r": return "\\r"; case "\"": case "'": case "\\": case "%": return "\\"+char; // prepends a backslash to backslash, percent, // and double/single quotes } }); } 

所以,这种方法的最佳实践可能是:

 connection.query('UPDATE visentry SET flag = "' + mysql_real_escape_string(flag) + '"', function(err,result) { }); 

用对象replace数组,

 connection.query('UPDATE visentry SET flag = ?', {flag: flag}) 

或者添加对自定义格式化程序的支持,并像这样写:

 connection.query("UPDATE visentry SET flag = :flag", { flag: flag }); 

考虑下面的代码片段:

 connection.query('UPDATE visentry SET ?', {flag: flag}, function(err, result) 

要么

 connection.query('UPDATE visentry SET flag = ?', [flag], function(err, result) 

要么

 connection.query("UPDATE visentry SET flag = :flag", { flag: flag });