2014-01-24 64 views
1

我第一次使用MySQL,並且努力正確地準備語句和轉義查詢值。這裏是我在哪裏:使用MySQL查詢的Node.js

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

我正在使用'mysql'node.js模塊通過felixge。

回答

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的認證信息,以不提交認證信息來回購。

+0

是的,我在文檔中閱讀了關於連接池的信息...你可能會詳細說明這些包含的內容嗎? – Dan

+0

另外,在查詢中使用SET和VALUES有什麼區別 – Dan

+0

SET和VALUES之間的區別只是實現相同目的的替代方法。當插入一條記錄時,我發現SET更容易處理。 – Daniel

0

您的sql var只有一個佔位符,但您試圖在您的inserts var中傳遞三個值。你想修改sql變種有三個佔位符這樣的:

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