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)
这将同时更新UserID
和Name
;除非您有触发器,否则 应该 没问题,因为它将 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 再次运行 Node-Mysql 查询而不停止 node.js 脚本