共计 880 个字符,预计需要花费 3 分钟才能阅读完成。
这篇文章主要为大家展示了“SQL 中怎么实现 WHERE IN 参数化编译”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“SQL 中怎么实现 WHERE IN 参数化编译”这篇文章吧。
例子
业务需求,需要通过 SQL 语句从 asset 资产表中查询域名字段在 (“thief.one”,”nmask.cn”,”sec.thief.one”) 范围内的数据库记录,SQL 语句该怎么写呢?
拼接法(错误)
values = thief.one , nmask.cn , sec.thief.one
sql = select * from asset where domain in (+values+)
print sql
说明:通过将搜索条件以字符串拼接的方式构造 sql 语句,语法上可通过,但存在着安全隐患(参照 sql 注入漏洞)
参数化 1(错误)
values = ((thief.one , nmask.cn , sec.thief.one),)
sql = select * from asset where domain in %s
print sql
print values
说明:通过参数化方式,将 where in 后面的查询内容传入。表面上看没问题,但在编译过程中,会将 (“thief.one”,”nmask.cn”,”sec.thief.one”) 整体看成一个字符串,而作为查询条件,与需求不符合。
参数化 2(正确)
values = (thief.one , nmask.cn , sec.thief.one)
sql = select * from asset where domain in ({}) .format(, .join([ %s for i in values]))
print sql
print values
说明:通过计算 values 里面字符串个数,动态构造编译的参数。
以上是“SQL 中怎么实现 WHERE IN 参数化编译”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!
正文完