回答

收藏

SQL如何查询参数化工作?

技术问答 技术问答 113 人阅读 | 0 人回复 | 2023-09-13

我问这个问题有点傻,因为我似乎是世界上唯一一个不知道这个问题的人,但无论如何,这是可行的。Python例如。当我使用原始的时候SQL查询(通常使用ORM)当我使用参数化时,例如SQLite以下示例:
1 E5 N; ]" m9 d' q; x1 _方法A:
+ K0 E4 ?5 }' F  Iusername = "wayne"query_params = (username)cursor.execute("SELECT * FROM mytable WHERE user=?",query_params)我知道这是可行的,我知道这是通常推荐的。SQL注入易受攻击的方法可执行以下操作:: g. l. v, e: o" Z; W+ {/ J. |3 ^
方法B:
! @3 i% c: m) e4 l( `$ z6 Z! fusername = "wayne"cursor.execute("SELECT * FROM mytable WHERE user='%s'" % username)到目前为止,我可以告诉我知道SQL注入,如本Wikipedia本文所述。我的问题很简单:方法A与方法B真正的区别是什么?为什么方法?A最终的结果和方法B不同?假设我应该cursor.execute()方法(Python的DB-8 [# v$ s8 j) b! r7 @
API规范的一部分)负责正确地对输入进行转义和类型检查,但这从未在任何地方明确声明。在这种情况下,所有这些参数化就是吗?对我来说,当我们说“参数化”时,所有的意思就是“字符串替换”,例如%格式。不是吗?4 H, p& }6 c' V, h
                                                               
0 R- |, l% l. c) n. v% [4 J    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则