這篇文章主要為大家展示了“SQL中怎么實(shí)現(xiàn)WHERE IN參數(shù)化編譯”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“SQL中怎么實(shí)現(xiàn)WHERE IN參數(shù)化編譯”這篇文章吧。
例子
業(yè)務(wù)需求,需要通過SQL語句從asset資產(chǎn)表中查詢域名字段在(“thief.one”,”nmask.cn”,”sec.thief.one”)范圍內(nèi)的數(shù)據(jù)庫記錄,SQL語句該怎么寫呢?
拼接法(錯(cuò)誤)
values = "'thief.one','nmask.cn','sec.thief.one'" sql = "select * from asset where domain in ("+values+")" print sql
說明:通過將搜索條件以字符串拼接的方式構(gòu)造sql語句,語法上可通過,但存在著安全隱患(參照sql注入漏洞)
參數(shù)化1(錯(cuò)誤)
values = (("thief.one","nmask.cn","sec.thief.one"),) sql = "select * from asset where domain in %s" print sql print values
說明:通過參數(shù)化方式,將where in 后面的查詢內(nèi)容傳入。表面上看沒問題,但在編譯過程中,會(huì)將(“thief.one”,”nmask.cn”,”sec.thief.one”)整體看成一個(gè)字符串,而作為查詢條件,與需求不符合。
參數(shù)化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
說明:通過計(jì)算values里面字符串個(gè)數(shù),動(dòng)態(tài)構(gòu)造編譯的參數(shù)。
以上是“SQL中怎么實(shí)現(xiàn)WHERE IN參數(shù)化編譯”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!