SQL WHERE IN參數化編譯寫法簡單示例

2020-06-13 15:04:33 來源:互聯網作者:佚名 人氣: 次閱讀 24 條評論

文章主要給大家介紹了關于SQL WHERE IN參數化編譯寫法的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面來一起學習學習吧...

前言

最近在一次使用sql中的where in語句時,造成了一些非預期的查詢結果。尤其是在代碼中去編寫并執行sql語句時,會出現一些意外情況。再查閱了一些資料以及手動測試后,發現是自己sql語句寫法存在問題,在此記錄。

例子

業務需求,需要通過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參數化編譯寫法簡單示例文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值。

您可能感興趣的文章

相關文章