国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > 文庫 > 正文

SQL WHERE IN參數(shù)化編譯寫法簡單示例

2020-10-29 21:45:44
字體:
供稿:網(wǎng)友

前言

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

例子

業(yè)務需求,需要通過SQL語句從asset資產(chǎn)表中查詢域名字段在(“thief.one”,”nmask.cn”,”sec.thief.one”)范圍內(nèi)的數(shù)據(jù)庫記錄,SQL語句該怎么寫呢?

拼接法(錯誤)

values = "'thief.one','nmask.cn','sec.thief.one'"sql = "select * from asset where domain in ("+values+")"print sql

說明:通過將搜索條件以字符串拼接的方式構(gòu)造sql語句,語法上可通過,但存在著安全隱患(參照sql注入漏洞)

參數(shù)化1(錯誤)

values = (("thief.one","nmask.cn","sec.thief.one"),)sql = "select * from asset where domain in %s"print sqlprint values

說明:通過參數(shù)化方式,將where in 后面的查詢內(nèi)容傳入。表面上看沒問題,但在編譯過程中,會將(“thief.one”,”nmask.cn”,”sec.thief.one”)整體看成一個字符串,而作為查詢條件,與需求不符合。

參數(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 sqlprint values

說明:通過計算values里面字符串個數(shù),動態(tài)構(gòu)造編譯的參數(shù)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南安市| 靖边县| 综艺| 鄂州市| 罗田县| 库尔勒市| 蕲春县| 呼图壁县| 大关县| 洛浦县| 杂多县| 周宁县| 玉树县| 富阳市| 灵寿县| 钟祥市| 十堰市| 买车| 泸定县| 稻城县| 湖南省| 翁牛特旗| 宜良县| 湛江市| 定日县| 克东县| 温泉县| 龙井市| 大英县| 东乡族自治县| 清徐县| 六安市| 寿光市| 衡阳市| 大理市| 荥阳市| 普兰县| 三原县| 澜沧| 台南县| 石楼县|