2016-10-31 21 views
2

這是我當前的JavaScript。Node-mysql插入具有兩個值的查詢?

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

此查詢會導致錯誤,我在做什麼錯誤?

回答

1

佔位符(?字符)將逃避您的querydata,以避免sql注入。因爲您不使用組合字符串進行查詢。對每個插入的值使用佔位符。像

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

檢查的NodeJS MySQL驅動程序文件here

2

你在做什麼錯的是你想你的兩個值連接爲一個字符串,並有該字符串替換到您的單一?。如果您使用的是單個?,則需要傳入對象參數與​​數據庫字段名稱相同的對象。

我會做這樣的:

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

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

}); 

你也可以做這樣的一個數組,而不是一個對象:

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

}); 

或像這樣:

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

}); 

但我發現使用單個?以及一個對象更具可讀性。