2016-10-31 5 views
2

Dies ist mein aktuelles Javascript.Node-MySQL-Abfrage mit zwei Werten einfügen?

var connection = mysql.createConnection({ 
    host: 'localhost', 
    user: 'root', 
    password: 'root', 
    database: 'codify', 
    port:  '8889'  
}) 


connection.connect(); 
//var querydata = +"'"+data.RegUsername + "','"+data.RegPassword+"'" 
    connection.query("INSERT INTO Codify (UsernameDB , PasswordDB) VALUES ?", data.RegUsername,+","+ data.Regpassword , function(err,rows,fields){ 
    if (err) throw err; 
    }) 
    });*/ 

Diese Abfrage verursacht einen Fehler, was mache ich falsch?

Antwort

1

Platzhalter (? Zeichen) wird Ihre Querydata für vermeiden sql-Injektion zu entkommen. weil Sie keine kombinierte Zeichenfolge für die Abfrage verwenden. Verwenden Sie für jeden eingefügten Wert Platzhalter. wie

("INSERT INTO Codify (UsernameDB , PasswordDB) VALUES (?,?)", [data.RegUsername,data.Regpassword] , function()) 

Check NodeJS MySQL-Treiber Dokument here

2

Was falsch Sie tun, ist, dass Sie versuchen, Ihre zwei Werte in einem einzigen String verketten und diese Zeichenfolge in die einzelnen ? ersetzt haben. Wenn Sie einen einzelnen ? verwenden, müssen Sie ein Objekt übergeben, dessen Parameter des Objekts den Datenbankfeldnamen entsprechen.

ich es so tun würde:

let payload = { 
    UsernameDB: data.RegUsername, 
    PasswordDB: data.Regpassword 
}; 

connection.query("INSERT INTO Codify SET ?", payload, function(err, rows) { 

}); 

Sie es auch so machen kann mit einem Array statt eines Objekts:

let sql = "INSERT INTO Codify (UsernameDB, PasswordDB) VALUES (?, ?)"; 
connection.query(sql, [ data.RegUsername, data.Regpassword ], function(err, rows) { 

}); 

oder so:

let sql = "INSERT INTO Codify SET UsernameDB = ?, PasswordDB = ?"; 
connection.query(sql, [ data.RegUsername, data.Regpassword ], function(err, rows) { 

}); 

Aber ich finde mit einem einzigen ? zusammen mit einem Objekt ist lesbarer.