首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 單引號處理兩大絕招:字串跳脫 vs 參數化查詢

     編輯:關於SqlServer

問題根源

動態拼接 SQL 字串時,若變數包含單引號(如 O'Reilly),會導致語法錯誤。非繫結開發模式下極常遇到。

方法一:字串跳脫函式(VB6 範例)

將單引號加倍('')以跳脫:

Function ProcessStr(ByVal str As String) As String
    Dim pos As Long
    pos = InStr(str, "'")
    Do While pos > 0
        str = Left(str, pos) & "'" & Mid(str, pos + 1)
        pos = InStr(pos + 2, str, "'")
    Loop
    ProcessStr = str
End Function

缺點:額外 CPU 開銷、易漏處理、防不了 SQL 注入。

方法二:ADO Command 參數化查詢(推薦)

使用 ADODB.Command + Parameter 物件,完全避開字串拼接:

Dim cmd As New ADODB.Command
Dim prm As New ADODB.Parameter
cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * FROM employee WHERE fname = ?"
cmd.CommandType = adCmdText
Set prm = cmd.CreateParameter("fname", adVarChar, adParamInput, 50, Combo1.Text)
cmd.Parameters.Append prm
Set rs = cmd.Execute

優點:

  • 自動處理單引號、雙位元組字元、二進位資料
  • 防止 SQL 注入攻擊
  • 搭配預存程序(預編譯)效能最佳

實戰比較

面向字串跳脫參數化查詢
開發速度快(直接拼字串)稍慢(需建立 Parameter)
執行效能較低高(可重複使用執行計畫)
安全性低(易受注入)高(資料與程式碼分離)
維護性差佳

結論

新專案請直接採用參數化查詢;舊系統若難以大幅重構,可暫時用跳脫函式過渡,但務必規劃改寫時程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved