【问题标题】:Node.js mysql query syntax issues UPDATE WHERENode.js mysql 查询语法问题 UPDATE WHERE
【发布时间】:2013-02-06 05:21:31
【问题描述】:

我试图更新 MYSQL DB 中的一些信息,但我不确定如何在 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});

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

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

    语法是:

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

    【讨论】:

    • 非常感谢,先生!
    【解决方案2】:

    [注意(2016 年 4 月 29 日添加): 此答案已被接受,但事实证明 是使用SET ? 的合理方式。有关详细信息,请参阅同一页面上的 Bala Clark 的回答。 ——鲁阿赫]


    来自the code for Connection.prototype.query() and Connection.createQuery(),很明显你只能传入一个single 值对象。我没有看到特殊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;除非您有触发器,否则 应该 没问题,因为它将 UserID 更新为它已经拥有的值。但这有点令人不安,我不推荐它。

    【讨论】:

    • @MarcioJasinski:感谢您的编辑建议,但它确实改变了这个答案,这会使该页面上的其他答案无效。我会看看是否能找到一种更优雅的方式来添加该信息。 . .
    • 您应该提到,为了使您的 :Name:UserId 实现正常工作,需要包含 custom-format 配置。
    【解决方案3】:

    您可以使用对象数组:

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

    【讨论】:

    • 在 WHERE 之后如何在此查询中使用 OR?
    【解决方案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
            })
          }
    
        })
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2021-11-19
        • 1970-01-01
        • 2012-08-26
        • 2015-09-01
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多