Автор: csbq
При запросе к базе данных часто можно столкнуться со следующей ситуацией:
Например, вы хотите запросить его имя пользователя и пароль в базе данных пользователей, но имя и пароль, используемые пользователем, содержат специальные символы, такие как одинарные кавычки, знаки «|», двойные кавычки или дефисы «&». .
Например, его имя — 1'test, а пароль — A|&900. Когда вы выполните следующий оператор запроса, обязательно будет сообщено об ошибке:
SQL = "SELECT * FROM SecurityLevel WHERE UID="" & UserID & "'"
SQL = SQL & " AND PWD="" & Пароль & "'",
потому что ваш SQL будет таким:
SELECT * FROM SecurityLevel WHERE UID='1'test' AND PWD='A|&900'
В SQL символ "|" используется для разделения полей, поэтому очевидно, что что-то пойдет не так. Для решения этих проблем теперь предусмотрены следующие функции:
Функция replaceStr (TextIn, ByVal SearchStr As String, _
ByVal Замена как строка, _
ByVal CompMode As Integer)
Dim WorkText As String, Pointer As Integer
If IsNull(TextIn) then
replaceStr = Null
Else
WorkText = TextIn
Pointer = InStr(1, WorkText) , SearchStr, CompMode)
Выполнять Пока Указатель > 0
WorkText = Left(WorkText, Pointer - 1) & Замена & _
Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Replacement), WorkText, _
SearchStr) , CompMode)
Цикл
replaceStr = WorkText
End If
End Function
Функция SQLFixup(TextIn)
SQLFixup = replaceStr(TextIn, "'", "''", 0)
Конечная функция
Функция JetSQLFixup(TextIn)
Dim Temp
Temp = replaceStr(TextIn, "'", "''", 0)
JetSQLFixup = replaceStr(Temp, "|", "' & chr(124) & '", 0)
Конечная функция
Функция FindFirstFixup(TextIn)
Dim Temp
Temp = replaceStr(TextIn, "'", "' & chr(39) & '", 0)
FindFirstFixup = replaceStr(Temp, "|", "' & chr(124) & '" , 0)
Конечная функция
После использования вышеуказанных функций, прежде чем выполнять sql, используйте:
SQL = "SELECT * FROM SecurityLevel WHERE UID="" & SQLFixup(UserID) & "'"
SQL = SQL & " AND PWD="" & SQLFixup(Пароль) & "'"