2016-10-06 20 views
1

問題是,當我使用?參數用於通過JSON名稱對值傳遞我的值,但mysql行不會插入行中的空白值(使用INSERT INTO語句)。無法使用INSERT和?檢索SQL條目

以下是我的節點的功能:

function registerdone(req, res) { 


    var username = req.body.username; 
    var password = req.body.password; 
    var firstname = req.body.firstname; 
    var lastname = req.body.lastname; 


    var encryptedPassword = bcrypt.hashSync(password, salt); 
    console.log("encryptedPassword: " + encryptedPassword); 
    var getUser = "INSERT INTO users (username, password, firstname, lastname) VALUES ('" + req.param("username") + "','" + encryptedPassword + "','" + req.param("firstname") + "','" + req.param("lastname") + "')"; 


    console.log("Query from registerdone is      :" + getUser); 

    mysql.fetchData(function(err, results) { 
     if (err) { 
      throw err; 
      ejs.renderFile('./views/failRegister.ejs', function(err, result) { 
       console.log('User with same Username already exists...'); 
      }); 
     } else { 


      console.log(req.body.username + " Registered !!!"); 
      ejs.renderFile('./views/successRegister.ejs', function(err, result) { 
       // render on success 
       if (!err) { 
        res.end(result); 
       } 
       // render or error 
       else { 
        res.end('An error occurred'); 
        console.log(err); 
       } 
      }); 

     } 
    }, getUser, queryParams); 
} 

這工作得很好,當我使用:

var getUser = "INSERT INTO users (username, password, firstname, lastname) VALUES ('" + req.param("username") + "','" + encryptedPassword + "','" + req.param("firstname") + "','" + req.param("lastname") + "')"; 

但是當我使用:

var getUser = "INSERT INTO users (username, password, firstname, lastname) VALUES (?) "; 
var queryParams = { 
    'username': username, 
    'password': encryptedPassword, 
    'firstname': firstname, 
    'lastname': lastname 
    }; 

和發送queryParams與回調函數,我得到所有的值在mysql行中爲null。

MySQL的DAO是:

function getConnection(){ 
    var connection     = mysql.createConnection({ 
     host      : 'localhost', 
     user      : 'root', 
     password     : 'root', 
     database     : 'ebay_main', 
     port      : 3306 
    }); 
    return connection; 
} 


function fetchData(callback, sqlQuery, queryParams){ 

    console.log("\nSQL Query  ::"+sqlQuery); 

    var connection     =getConnection(); 

    connection.query(sqlQuery, queryParams, function(err, rows, fields) { 
     if(err){ 
      console.log("ERROR  : " + err.message); 
     } 
     else 
     { // return err or result 
      console.log("DB Results:"+JSON.stringify(rows)); 
      callback(err, rows); 
     } 
    }); 
    console.log("\nConnection closed.."); 
    connection.end(); 
} 
+1

嗨,我不知道node.js的語法。但在其他語言,你必須寫一個'?'對於每個參數...你嘗試類似var getUser =「INSERT INTO用戶(用戶名,密碼,名字,姓氏)VALUES(?,?,?,?)」; ? –

回答

0

您可以使用更簡潔的語法:INSERT ?? SET ?

var table = 'users'; 
var queryParams = { 
    'username': username, 
    'password': encryptedPassword, 
    'firstname': firstname, 
    'lastname': lastname 
}; 
connection.query('INSERT ?? SET ?', [table, queryParams ], function(err, rows, fields) { 
    //... 
});