首页 > 解决方案 > 如何安全地删除记录?

问题描述

语境

我创建了一个处理待办事项的应用程序。我希望能够根据从 url 获得的 id 删除待办事项

import vweb

struct App {
    vweb.Context
}

[post]
["/todo/:id/delete"]
pub fn (mut app App) delete_todo_response(id string) vweb.Result {
  db := sqlite.open("dist/database.db") or {
    return app.redirect("/todo")
  }

  db.exec_none('DELETE FROM todo WHERE id = $id') // id is not escaped
}

fn main() {
  vweb.run<App>(80)
}

问题

如您所见,id 没有被转义。我觉得这不是做到这一点的理想和安全的方式。

问题

标签: ormvlang

解决方案


据我所知,没有标准的方法来逃避 sqlite 查询。但是,您确实可以使用 ORM。如果你声明你的 Todo 结构,应该这样做:

sql db {
    delete from Todo where id == id
}

推荐阅读