繁体   English   中英

节点mysql的正确UPDATE查询语法

[英]Correct UPDATE query syntax for node-mysql

我有一个数组“标志”,并且在函数中更改了该数组的值。 现在,我需要将其更新到数据库中,但是我无法这样做。 我已经在表中有标志列。 我不知道如何更新表中变量标记内的值

如果我尝试

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行的''附近使用正确的语法

有什么建议吗

用对象替换数组,

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

或添加对自定义格式器的支持并编写如下:

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

它足以处理数组:

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) { });

如果要使用第一种方法,则应该使用变量,而不是查询中的字符串。 正确的语法将是:

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

但是这种方法不够安全,您可能希望转义flag(引号和其他特殊字符)的值,并使它对sql友好。

为此,您可以使用一些代码(更多信息- 使javascript字符串sql友好 ):

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) { });

考虑以下代码片段:

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 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM