Node.js mysql проблемы с синтаксисом запроса UPDATE WHERE

Я пытаюсь обновить некоторую информацию в базе данных MYSQL, но я не уверен, как это сделать в node.js. Это драйвер mysql, который я использую https://github.com/felixge/node-mysql

Что я до сих пор

connection.query('SELECT * FROM users WHERE UserID = ?', [userId], function(err, results) {
if (results[0]) {
if (results[0].Name!=name) {
console.log(results[0].Name);
connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name});
}
console.log(results[0].UserID);
}
});

Все работает, кроме...

connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name});

В PHP у меня было бы это...

mysql_query("UPDATE users SET Name='".$_GET["name"]."' WHERE UserID='".$row['UserID']."'");

Я не уверен, что я делаю неправильно, но я уверен, что проблема здесь.

connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name});

Ответы

Ответ 1

[ Примечание (добавлено 2016-04-29):. Этот ответ был принят, но оказывается, что существует разумный способ использования SET ?. Для получения дополнительной информации см. Ответ Bala Clark на этой же странице. — ruakh]


Из кода для Connection.prototype.query() и Connection.createQuery() ясно, что вы можете передавать только один объект значений. Я не вижу, где определен код для специального поведения SET ? — это явно не в SqlString.formatQuery() — но если он использует SqlString.objectToValues(), то я думаю, что нет возможности использовать его вместе с другим ?.

Я думаю, что лучший подход состоит в том, чтобы просто отказаться от опрятной функции SET ? и написать одно из них:

connection.query('UPDATE users SET Name = ? WHERE UserID = ?', [name, userId])
connection.query('UPDATE users SET Name = :Name WHERE UserID = :UserID',
                     {UserID: userId, Name: name})

но если вы действительно хотите использовать SET ?, я полагаю, вы могли бы написать это:

connection.query('UPDATE users SET ? WHERE UserID = :UserID',
                     {UserID: userId, Name: name})

который будет обновлять как UserID, так и Name; если у вас нет триггера, это должно быть O.K., поскольку оно обновляет UserID до значения, которое оно уже имело. Но это отчасти смущает, и я не рекомендую это.

Ответ 2

Ответ ruakh не совсем корректен, вы можете использовать функцию SET ? с другим ?.

Синтаксис:

connection.query('UPDATE users SET ? WHERE UserID = ?', [{ Name: name }, userId])

Ответ 3

Вы можете использовать массив объектов:

connection.query('UPDATE user SET ? WHERE ?', [{ Name: name }, { UserId: userId }])

Ответ 4

Это то, что сработало для меня

 var records = 
 [name,email,adhar,ROLE,NOTES,REQUESTFORSUPPLIER,PASSWORD,LOCATION,CREATEDBY,CREATEDON,MODIFIEDBY,MODIFIEDON,mobile];

    var sql="UPDATE flavica_user SET Name=?,EMAIL=?,AADHAR=?,ROLE=?,NOTES=?,REQUESTFORSUPPLIER=?,PASSWORD=?,LOCATION=?,CREATEDBY=?,CREATEDON=?,MODIFIEDBY=?,MODIFIEDON=? WHERE USER_MOBILE=?"
    //var sql="UPDATE 'flavica_user' SET ? WHERE ?";
    //this sql updates flavica_user
    con.query(sql,records,(err,result)=>{

      if(err){
        res.json({
          status:400,
          message:err
        })
      }

      else{
        res.json({
          status:200,
          message:result
        })
      }

    })