这是我目前的javascript。
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;
})
});*/
此查询导致错误,我做错了什么?
答案 0 :(得分:4)
占位符(?character)将转义你的querydata以避免sql-injection。因为您不使用组合字符串进行查询。对每个插入的值使用占位符。喜欢
("INSERT INTO Codify (UsernameDB , PasswordDB) VALUES (?,?)", [data.RegUsername,data.Regpassword] , function () )
检查nodejs mysql驱动程序文档here
答案 1 :(得分:4)
您所犯的错误在于您尝试将两个值连接成一个字符串,并将该字符串替换为单个?
。如果您使用单个?
,则需要传入一个对象的参数与数据库字段名称相同的对象。
我会这样做:
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) {
});
但我发现使用单个?
和一个对象更具可读性。