sequelize你正在使用sql安全更新错误

时间:2017-11-15 09:22:34

标签: mysql sql orm nodes sequelize.js

我随机收到此错误。我正在基于用户名从 activeusers 表中删除它有时会给我错误并且有时会顺利运行。 这是我的删除代码

让我们说

 data={nickname:'asad',id:1}
 activeusers.destroy({where:{username:data.nickname} }).then(res=>{
 });

我已经从sql workbench关闭sql安全更新,但问题仍然存在 我怎么能永久摆脱这个错误 enter image description here

1 个答案:

答案 0 :(得分:1)

这是MySQL更新的常见问题。这是您的查询:

DELETE FROM ActiveUsers WHERE username = 'mazhar.hayat@ibexglobal.com'

错误源于您未在WHERE子句中使用主键列。如果您根本没有WHERE子句,也会看到此错误。 MySQL有一种模式,可以将这样的DML查询视为不安全,因为它很广泛并且存在破坏数据的风险。

有一个可能有用的黑客解决方案。您可以修改查询以提及主键列,如下所示:

DELETE
FROM ActiveUser
WHERE username = 'mazhar.hayat@ibexglobal.com' AND id=id

这可能会欺骗MySQL认为查询是安全的,因为它提到了id子句中的主键列WHERE

但我建议你直接在MySQL中关闭安全更新模式。编辑您的启动脚本,并确保脚本中未提及--safe-updates--i-am-a-dummy

修改

如果您想从destroy处理此问题,则查询选项是唯一选项:

Post.findAll(
    { where: ["username = ? AND id = id", data.nickname] }
).success()