引數化SQL小認識

2022-04-04 05:05:08 字數 1886 閱讀 2674

在做機房收費系統專案,編寫資料連線並訪問資料庫時,見別人都用了帶「@」字元的sql語句,就很好奇為什麼都用這個語句呢?直接拼寫sql語句不是更加方便嗎?

帶著這個問題上網查資料,才知道原來他們用的是引數化sql,那麼為什麼要用引數化sql?什麼是引數化sql呢?

在做第一次機房收費系統的時候,大部分的應該都是使用直接拼sql語句的方法,那時候就聽前輩們有說到sql注入,那時候也不要求了解,只需要知道就行。

1.直接拼sql:

就像大家在做第一次機房收費系統的時候所了解到的一樣,直接拼寫sql很容易帶來sql注入攻擊,但是因為直接拼寫不用新增sqlparameter,所以會減少很少的**。因此,這種方法也會把你直接編寫的命令直接發到資料伺服器上直接執行。

2.引數化sql:

所謂的「引數化sql」就是在應用程式設定sqlcommand.commandtext的時候使用引數(如:param1),然後通過sqlcommand.parameters.add來設定這些引數的值。這種做法會把你準備好的命令通過sp_executesql系統儲存過程來執行,使用引數化,最直接的好處就是防止sql注入。也就是說使用這種方法,主要是為了保證資料庫的安全

引數化sql原理:

在使用引數化查詢的情況下,資料伺服器不會將引數的內容視為

sql指令的一部分來處理,而是在資料庫完成

sql指令之後,才套用引數執行,因此就算引數中含有有損的指令,也不會被資料庫執行。

下面只是自己在做機房收費系統專案的時候,用到引數化查詢的乙個小例子:

public class sqlstubasicinfo : implements istubasicinfo

dim conn as sqlconnection = new sqlconnection(strconnstr) '例項化connection物件

''' ''' 判斷卡號是否存在

'''

'''

''' 返回實體層

'''

public function checkcardno(icard as stubasicinfo) as enity.stubasicinfo implements istubasicinfo.checkcardno

dim sql as string = "select * from t_stubasicinfo where cardno=@cardno"

dim params as sqlparameter()

params =

dim cmd as sqlcommand = new sqlcommand(sql, conn)

cmd.parameters.addrange(params)

dim reader as sqldatareader

tryconn.open()

reader = cmd.executereader

reader.read()

icard.cardno = trim(reader.item("cardno"))

return icard

catch ex as exception

icard.cardno = ""

return icard

end try

end function

以前,對學習新的知識總是帶有一種恐懼感,總覺得自己不能把它們弄明白。看到別人在做專案的時候,用到了很多自己不會的知識,就覺得很有壓力,其實換一種心態去想,這正是給你提供了乙個提公升自我的機會,誰不是從不會走過來的!

引數化的sql

我們原先寫的sql語句總是把條件直接拼進去,這樣每次的sql都是不同的,但這些sql除了條件部分不同外,其他都是一樣的,sqlserver在解析sql語句的時候分了幾個步驟 1 語法分析 2 生成乙個執行計畫 執行計畫就是執行的路徑,完成乙個任務可以有好多條路徑的,sqlserver會通過複雜的分析...

mysql 引數化 MySQL之sql引數化

奮鬥的路上,時間總是過得很快,目前的困難和麻煩是很多,但是只要不忘初心,腳踏實地一步一步的朝著目標前進,最後的結局交給時間來定奪。週末了,我們來說說一下,sql語句的引數化問題,為了避免sql注入的問題,我們把sql語句進行引數化,來增加資料庫的安全性。詞窮,先看看code吧!from mysqld...

SQL語句引數化 封裝

封裝sql語句引數化 以下 寫為sqlcanshuhua.py檔案 encoding utf 8 from pymysql import class mysqlhelper def init self,user,passwd,db,host localhost port 3306,charset u...