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

Posted

技术标签:

【中文标题】Node.js mysql 查询语法问题 UPDATE WHERE【英文标题】:Node.js mysql query syntax issues 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);

【问题讨论】:

【参考方案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));
        
    );
 
);

【讨论】:

以上是关于Node.js mysql 查询语法问题 UPDATE WHERE的主要内容,如果未能解决你的问题,请参考以下文章

node.js 同步 mysql 查询

Node.JS 再次运行 Node-Mysql 查询而不停止 node.js 脚本

带有mysql查询的异步函数不会返回查询结果node.js

node.js 中的 mySQL 查询返回未定义

Node.JS + MySQL - 组合查询以定义变量和选择数据

使用 Node.JS 查询 MySQL 并在网页中显示结果