Node.js mysql查询语法问题UPDATE WHERE

时间:2013-02-21 01:03:33

标签: mysql node.js

我尝试更新MYSQL DB中的一些信息,但我不知道如何在node.js中更新它。这是我正在使用的https://github.com/felixge/node-mysql

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

5 个答案:

答案 0 :(得分:42)

[注释(已添加2016-04-29):此答案已被接受,但事实证明使用SET ?的合理方式。有关详细信息,请参阅Bala Clark在同一页面上的答案。 -ruakh


the code for Connection.prototype.query() and 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})

会同时更新UserIDName;除非你有一个触发器,否则这个为O.K.,因为它正在将UserID更新为它已经拥有的值。但这有点令人不安,我不推荐它。

答案 1 :(得分:26)

ruakh的回答并不完全正确,您可以将SET ?功能与另一个?一起使用。

语法为:

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

答案 2 :(得分:16)

您可以使用对象数组:

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

答案 3 :(得分:0)

这是对我有用的

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

    })

答案 4 :(得分:0)

enter image description here

let query_1 =  `UPDATE reindexing_status SET success="Failure" where status="In Progress"`;
await updateValues(db_connection,query_1);
 
if(lambdaInvokeStatusCode === 200)

{
   let query_1 =  `UPDATE reindexing_status SET success="Success" where status="In Progress"`;
   await updateValues(db_connection,query_1);
   
   let query_2 =  `UPDATE reindexing_status SET end_time='${indexedAt}' where status="In Progress"`;
   await updateValues(db_connection,query_2);
   
   let query_3 =  `UPDATE reindexing_status SET status="Complete" where status="In Progress"`;
   await updateValues(db_connection,query_3);
   

}



async function updateValues(db_connection,sql) {
await new Promise((resolve, reject) => {
    db_connection.query(sql, function (err, result) {
        if (err) {
            console.log(err);
            reject(err);
        }
        else {
           
            console.log("RDS Updated Successfully",result );
            resolve("RDS URL Column: " + JSON.stringify(result));
        }
    });
 
});
}