2015-05-04 17 views
5

Ho un array 'flag' e ho modificato i valori di tale array nella mia funzione. Ora ho bisogno di aggiornare lo stesso nel database, ma non sono in grado di farlo. Ho già una colonna flag nella tabella. Non so come aggiornare il valore entro la bandiera variabile nella tabellaSintassi di query UPDATE corretta per node-mysql

Se provo

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

Si aggiorna la bandiera della colonna con la bandiera del valore. Se provo il seguente

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

dà un errore

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

Tutti i suggerimenti soddisfanno

risposta

2

E 'abbastanza intelligente per affrontare con una serie:

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

Se si desidera utilizzare il primo approccio, è necessario utilizzare una variabile, non la stringa all'interno della query. La sintassi corretta sarà:

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

Ma questo approccio non è abbastanza sicuro, probabilmente si vuole sfuggire valore della bandiera (citazioni e altri caratteri speciali) e renderlo sql-friendly.

È possibile utilizzare per questo scopo un certo codice come questo (per saperne di più - 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 
     } 
    }); 
} 

Quindi, probabilmente la migliore pratica di questo approccio sarà:

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

Sostituire Array con oggetto,

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

O aggiungere il supporto per custom formatter e scrivere come questo:

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

ho provato entrambi i modi e ottenendo di nuovo questo errore "Si è verificato un errore nella sintassi SQL; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a ': flag' alla riga 1 '' – user3050590

1

considerare questo seguente frammento di codice:

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

o

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

o

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

Ho provato tutto e ho ricevuto questo errore: hai un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a ': flag' alla riga 1 – user3050590

Problemi correlati