我尝试更新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});
答案 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})
会同时更新UserID
和Name
;除非你有一个触发器,否则这个应为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)
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));
}
});
});
}