Node.js mysql проблемы с синтаксисом запроса UPDATE WHERE
Я пытаюсь обновить некоторую информацию в базе данных MYSQL, но я не уверен, как это сделать в 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
[ Примечание (добавлено 2016-04-29):. Этот ответ был принят, но оказывается, что существует разумный способ использования SET ?
. Для получения дополнительной информации см. Ответ Bala Clark на этой же странице. — ruakh]
Из кода для Connection.prototype.query()
и 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
до значения, которое оно уже имело. Но это отчасти смущает, и я не рекомендую это.
Ответ 2
Ответ ruakh
не совсем корректен, вы можете использовать функцию SET ?
с другим ?
.
Синтаксис:
connection.query('UPDATE users SET ? WHERE UserID = ?', [{ Name: name }, userId])
Ответ 3
Вы можете использовать массив объектов:
connection.query('UPDATE user SET ? WHERE ?', [{ Name: name }, { UserId: userId }])
Ответ 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
})
}
})