2015-05-04 7 views
5

Ich habe ein Array ‚flag‘, und ich habe die Werte des Arrays in meiner Funktion verändert. Jetzt muss ich das gleiche in die Datenbank aktualisieren, aber ich kann das nicht. Ich habe bereits eine Flaggenspalte in der Tabelle. Ich weiß nicht, wie der Wert in der Variablen-Flag aktualisieren in der TabelleCorrect UPDATE Abfragesyntax für Knoten-mysql

Wenn ich

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

versuchen Sie aktualisiert die Spalte Flag mit dem Wert Flagge. Wenn ich die folgende versuchen

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

Es gibt einen Fehler

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

Irgendwelche Vorschläge

Antwort

2

Es ist klug genug, um mit einer Reihe zu beschäftigen:

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

Wenn Sie Ihren ersten Ansatz verwenden möchten, als eine Variable verwendet werden soll, nicht die Zeichenfolge in Ihrer Abfrage. Die richtige Syntax lautet:

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

Aber dieser Ansatz ist nicht sicher genug, werden Sie wahrscheinlich Wert des Merkers (Zitate und andere Sonderzeichen) entkommen wollen, und es sql freundlicher zu gestalten.

Sie können zu diesem Zweck verwenden einige Code wie folgt (lesen Sie mehr - 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 
     } 
    }); 
} 

Also, wahrscheinlich die beste Praxis für diesen Ansatz wird:

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

ersetzen Array mit Objekt,

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

Oder fügen Sie Unterstützung für custom formatter und schreiben bitte wie dies:

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

habe ich versucht, in beide Richtungen und diesen Fehler erneut erhalten 'Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, damit die richtige Syntax in der Nähe von ': flag' in Zeile 1 verwendet wird. ' – user3050590

1

Betrachten Sie diese folgenden Ausschnitt:

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

oder

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

oder

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

Ich habe alles versucht und diesen Fehler erhalten: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, damit die richtige Syntax in der Nähe von ': flag' in Zeile 1 verwendet werden kann – user3050590