SQL WHERE IN參數(shù)化編譯寫(xiě)法簡(jiǎn)單示例
前言
最近在一次使用sql中的where in語(yǔ)句時(shí),造成了一些非預(yù)期的查詢結(jié)果。尤其是在代碼中去編寫(xiě)并執(zhí)行sql語(yǔ)句時(shí),會(huì)出現(xiàn)一些意外情況。再查閱了一些資料以及手動(dòng)測(cè)試后,發(fā)現(xiàn)是自己sql語(yǔ)句寫(xiě)法存在問(wèn)題,在此記錄。
例子
業(yè)務(wù)需求,需要通過(guò)SQL語(yǔ)句從asset資產(chǎn)表中查詢域名字段在(“thief.one”,”nmask.cn”,”sec.thief.one”)范圍內(nèi)的數(shù)據(jù)庫(kù)記錄,SQL語(yǔ)句該怎么寫(xiě)呢?
拼接法(錯(cuò)誤)
values = "'thief.one','nmask.cn','sec.thief.one'" sql = "select * from asset where domain in ("+values+")" print sql
說(shuō)明:通過(guò)將搜索條件以字符串拼接的方式構(gòu)造sql語(yǔ)句,語(yǔ)法上可通過(guò),但存在著安全隱患(參照sql注入漏洞)
參數(shù)化1(錯(cuò)誤)
values = (("thief.one","nmask.cn","sec.thief.one"),) sql = "select * from asset where domain in %s" print sql print values
說(shuō)明:通過(guò)參數(shù)化方式,將where in 后面的查詢內(nèi)容傳入。表面上看沒(méi)問(wèn)題,但在編譯過(guò)程中,會(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
說(shuō)明:通過(guò)計(jì)算values里面字符串個(gè)數(shù),動(dòng)態(tài)構(gòu)造編譯的參數(shù)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
詳細(xì)聊聊關(guān)于sql注入的一些零散知識(shí)點(diǎn)
SQL注入攻擊是通過(guò)將惡意的SQL查詢或添加語(yǔ)句插入到應(yīng)用的輸入?yún)?shù)中,再在后臺(tái)SQL服務(wù)器上解析執(zhí)行進(jìn)行的攻擊,它目前是黑客對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊的最常用的手段之一,這篇文章主要給大家介紹了關(guān)于sql注入的一些零散知識(shí)點(diǎn),需要的朋友可以參考下2021-10-10關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)概述與優(yōu)缺點(diǎn)對(duì)比
這篇文章介紹了關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)概述與優(yōu)缺點(diǎn)對(duì)比,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03關(guān)于面試中常問(wèn)的數(shù)據(jù)庫(kù)回表問(wèn)題
這篇文章主要介紹了關(guān)于面試中常問(wèn)的數(shù)據(jù)庫(kù)回表問(wèn)題,回表就是先通過(guò)數(shù)據(jù)庫(kù)索引掃描出數(shù)據(jù)所在的行,再通過(guò)行主鍵id取出索引中未提供的數(shù)據(jù),即基于非主鍵索引的查詢需要多掃描一棵索引樹(shù),需要的朋友可以參考下2023-07-07ubuntu中使用docker下載華為opengauss數(shù)據(jù)庫(kù)超簡(jiǎn)單步驟
openGauss是關(guān)系型數(shù)據(jù)庫(kù),采用客戶端/服務(wù)器,單進(jìn)程多線程架構(gòu),支持單機(jī)和一主多備部署方式,備機(jī)可讀,支持雙機(jī)高可用和讀擴(kuò)展,這篇文章主要給大家介紹了關(guān)于ubuntu中使用docker下載華為opengauss數(shù)據(jù)庫(kù)超的簡(jiǎn)單步驟,需要的朋友可以參考下2024-04-048種主流NoSQL數(shù)據(jù)庫(kù)系統(tǒng)特性對(duì)比和最佳應(yīng)用場(chǎng)景
這篇文章主要介紹了8種主流NoSQL數(shù)據(jù)庫(kù)系統(tǒng)特性對(duì)比和最佳應(yīng)用場(chǎng)景,對(duì)選擇一個(gè)NoSQL數(shù)據(jù)庫(kù)來(lái)說(shuō)是一個(gè)不錯(cuò)的參考文章,需要的朋友可以參考下2014-06-06數(shù)據(jù)庫(kù)設(shè)計(jì)技巧[轉(zhuǎn)]
數(shù)據(jù)庫(kù)設(shè)計(jì)技巧[轉(zhuǎn)]...2007-01-01