【问题标题】:DAL executesql parameterized queriesDAL executesql 参数化查询
【发布时间】:2017-07-04 18:44:53
【问题描述】:

我一直在寻找,但在任何地方都找不到我正在寻找的信息。

如何在 web2py 中使用 DAL 将参数化查询与自定义 sql 一起使用?例如,我有以下查询:

sql = "SELECT * FROM Users WHERE Username = %s"

我这样称呼它

user = db.executesql(sql, username, as_dict=True)

我认为会使用参数进行查询,但如果我通过 "' or 1=1; --;"作为用户名,代码崩溃说它是无效的 SQL。

使用 DAL 将参数化查询与自定义 SQL 一起使用的正确方法是什么,因为这显然没有像我想象的那样转义?

谢谢,

特拉维斯

【问题讨论】:

    标签: python web2py


    【解决方案1】:

    使用placeholders参数:

    user = db.executesql(sql, placeholders=(username,), as_dict=True)
    

    【讨论】:

    • 这就是我正在使用的。用户名作为占位符参数传递。在一台服务器上,代码似乎可以正常工作而不会崩溃,但在新部署中,代码会运行但不会转义。
    • @TravisSmith 这可能是因为每个服务器都使用不同的驱动程序。您使用的是哪个 SQL 引擎?
    • 两台服务器都在使用 Maria10,但是我可以运行一些东西来验证所有内容都加载相同并且它们使用相同的驱动程序吗?
    • @TravisSmith 你可以print(db._adapter)
    • 谢谢,但两台服务器都返回:“pydal.adapters.mysql.MySQLAdapter”
    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 2017-08-31
    • 1970-01-01
    • 2013-07-17
    • 2012-08-16
    相关资源
    最近更新 更多