带有MySQL查询的Node.js

时间:2014-01-24 20:03:22

标签: 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模块。

2 个答案:

答案 0 :(得分:1)

每个值需要?。另外,请务必使用连接池。

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

将环境变量用于mysql身份验证信息,以便不向身份验证提交身份验证信息。

答案 1 :(得分:0)

您的sql var中只有一个占位符,但您尝试在inserts var中传递三个值。您想修改sql var以包含三个占位符:

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