2015-05-04 19 views
5

Tôi có một 'cờ' mảng và tôi đã thay đổi giá trị của mảng đó trong hàm của tôi. Bây giờ tôi cần phải cập nhật tương tự vào cơ sở dữ liệu, nhưng tôi không thể làm như vậy. Tôi đã có cột cờ trong bảng. Tôi không biết làm thế nào để cập nhật giá trị trong vòng cờ biến trong bảngCú pháp truy vấn UPDATE đúng cho nút-mysql

Nếu tôi cố gắng

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

Nó cập nhật cờ cột với giá trị cờ. Nếu tôi cố gắng sau

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

Nó cung cấp cho một lỗi

Error: ER_PARSE_ERROR: 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 '' at line 1

Mọi góp ý xin vui lòng

Trả lời

2

Nó đủ thông minh để đối phó với một mảng:

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

Nếu bạn muốn sử dụng cách tiếp cận đầu tiên, bạn nên sử dụng một biến, không phải chuỗi bên trong truy vấn của bạn. Đúng cú pháp sẽ là:

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

Nhưng phương pháp này là không đủ an toàn, bạn có thể muốn thoát khỏi giá trị của lá cờ (dấu ngoặc kép và ký tự đặc biệt khác) và làm cho nó sql-thân thiện.

Bạn có thể sử dụng cho mục đích này một số mã như thế này (đọc thêm - Making a javascript string sql friendly):

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

Vì vậy, có lẽ là thực hành tốt nhất cho cách tiếp cận này sẽ là:

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

Thay Array với Object,

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

Hoặc thêm hỗ trợ cho custom formatter và viết như này:

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

tôi đã cố gắng cả hai cách và nhận được lỗi này một lần nữa 'Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần ': flag' tại dòng 1] ' – user3050590

1

Xem xét việc này đoạn sau:

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

hoặc

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

hoặc

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

Tôi đã thử tất cả và nhận được lỗi này: Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp đúng để sử dụng gần ': flag' ở dòng 1 – user3050590

Các vấn đề liên quan