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});
[ 注意(补充2016-04-29):这个答案被接受了,但是事实certificate有一个合理的方法来使用SET ?
。 有关详细信息,请参见Bala Clark在同一页面上的回答。 -ruakh ]
从Connection.prototype.query()
和Connection.createQuery()
的代码中 ,显然你只能传入一个值对象。 我没有看到特殊SET ?
的代码在哪里SET ?
行为是定义的 – 这显然不是在SqlString.formatQuery()
– 但如果它使用SqlString.objectToValues()
,那么我想没有办法与另一个一起使用它?
。
我认为最好的办法是放弃整齐的SET ?
function,并写下这些:
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
更新为它已有的值。 但是这有点令人不安,我不推荐它。
卢哈的答案不完全正确,你可以使用SET ?
function与另一个?
。
语法是:
connection.query('UPDATE users SET ? WHERE UserID = ?', [{ Name: name }, userId])
您可以使用一组对象:
connection.query('UPDATE user SET ? WHERE ?', [{ Name: name }, { UserId: userId }])