共計 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 行業資訊頻道!
正文完