المؤلف: csbq
عند الاستعلام عن قاعدة البيانات، ستواجه غالبًا الموقف التالي:
على سبيل المثال، تريد الاستعلام عن اسم المستخدم وكلمة المرور الخاصة به في قاعدة بيانات المستخدم، ولكن الاسم وكلمة المرور اللذين يستخدمهما المستخدم يحتويان على أحرف خاصة، مثل علامات الاقتباس المفردة أو علامات الاقتباس "|" أو علامات الاقتباس المزدوجة أو الواصلات "&" .
على سبيل المثال، اسمه هو 1'test وكلمة المرور الخاصة به هي A|&900. عند تنفيذ عبارة الاستعلام التالية، سيتم الإبلاغ عن خطأ بالتأكيد:
SQL = "SELECT * FROM SecurityLevel WHERE UID='" ومعرف المستخدم & "'"
SQL = SQL & " AND PWD ='" & كلمة المرور & "'"
لأن SQL الخاص بك سيكون هكذا:
SELECT * FROM SecurityLevel WHERE UID='1'test' AND PWD='A|&900'
في SQL، يتم استخدام "|" لفصل الحقول، لذلك من الواضح أن هناك خطأ ما. يتم الآن توفير الوظائف التالية للتعامل مع هذه الصداع:
الوظيفة ReplaceStr (TextIn، ByVal SearchStr كسلسلة، _
استبدال ByVal كسلسلة، _
ByVal CompMode كعدد صحيح)
Dim WorkText كسلسلة، المؤشر كعدد صحيح
إذا كان IsNull(TextIn) ثم
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)
Loop
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(كلمة المرور) & "'"