작성자: csbq
데이터베이스를 쿼리할 때 다음과 같은 상황이 자주 발생합니다.
예를 들어 사용자 데이터베이스에서 사용자 이름과 비밀번호를 쿼리하려고 하는데 사용자가 사용하는 이름과 비밀번호에 작은따옴표, "|" 기호, 큰따옴표 또는 하이픈 "&"과 같은 특수 문자가 포함되어 있습니다. .
예를 들어, 그의 이름은 1'test이고 그의 비밀번호는 A|&900입니다. 다음 쿼리 문을 실행하면 오류가 보고됩니다.
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & UserID & "'"
SQL = SQL & " AND PWD='" & Password & "'"
SQL은 다음과 같기 때문입니다.
SELECT * FROM SecurityLevel WHERE UID='1'test' AND PWD='A|&900'
SQL에서 "|"는 필드를 구분하는 데 사용되므로 분명히 뭔가 잘못될 것입니다. 이제 이러한 문제를 해결하기 위해 다음 기능이 제공됩니다.
함수 바꾸기Str(TextIn, ByVal SearchStr을 문자열로, _
ByVal 대체를 문자열로, _
ByVal CompMode를 정수로)
Dim WorkText를 문자열로, 포인터를 정수로 사용
If IsNull(TextIn) Then
LeaveStr = Null
Else
WorkText = TextIn
Pointer = InStr(1, WorkText) , SearchStr, CompMode)
Do While Pointer > 0
WorkText = Left(WorkText, Pointer - 1) & replacement & _
Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Replacement), WorkText, _
SearchStr , CompMode)
루프
바꾸기Str = WorkText
End If
End 함수
함수 SQLFixup(TextIn)
SQLFixup = 바꾸기Str(TextIn, "'", "''", 0)
함수 종료
함수 JetSQLFixup(TextIn)
Dim Temp
Temp = 바꾸기Str(TextIn, "'", "''", 0)
JetSQLFixup = 바꾸기Str(Temp, "|", "' & chr(124) & '", 0)
End Function
함수 FindFirstFixup(TextIn)
Dim Temp
Temp = 바꾸기Str(TextIn, "'", "' & chr(39) & '", 0)
FindFirstFixup = 바꾸기Str(Temp, "|", "' & chr(124) & '" , 0)
기능 종료
위의 기능을 수행한 후 SQL을 실행하기 전에 다음을 사용하십시오.
SQL = "SELECT * FROM SecurityLevel WHERE UID='" & SQLFixup(UserID) & "'"
SQL = SQL & " AND PWD='" & SQLFixup(비밀번호) & "'"