带有MySQL查询的Node.js

我第一次使用MySQL,并且正在努力正确地准备语句和转义查询值。 这是我在哪里:

connection.connect(); formatDate(function(date){ var sql = "INSERT INTO coffee_tbl (coffee_name, coffee_type, submission_date) VALUES ?"; var inserts = [req.param('name'), req.param('type'), date]; var queryString = mysql.format(sql, inserts); console.log(queryString) connection.query(queryString, function(err, results){ if(err) serverError(res, err); else{ res.redirect('/view_coffee'); } }); }); connection.end(); 

我正在使用felixge的'mysql'node.js模块。

你需要一个? 每个值。 另外,一定要使用连接池。

 formatDate(function(date){ var sql = [ "INSERT INTO coffee_tbl SET", " coffee_name=?", ",coffee_type=?", ",submission_date=?" ].join(''); var inserts = [req.param('name'), req.param('type'), date]; pool.getConnection(function(err, connection) { if(err) return console.error(err); connection.query(sql, inserts, function(err, results) { connection.release(); if(err) return console.error(err); res.redirect('/view_coffee'); }); }); }); 

设置连接池:

 var pool = mysql.createPool({ host: process.env.MYSQL_HOST, user: process.env.MYSQL_USER, password: process.env.MYSQL_PASS, database: process.env.MYSQL_NAME, connectionLimit: 8 }); 

使用你的mysqlauthentication信息的环境variables,以便不提交身份validation信息回购。

你只有一个占位符在你的sql var,但是你正在尝试在你的inserts var中传递三个值。 你想修改你的sql var有三个占位符,像这样:

 var sql = "INSERT INTO coffee_tbl (coffee_name, coffee_type, submission_date) VALUES (?, ?, ?)";