小猫咪咪 發表於 2023-11-11 00:00:00

数据库查询中遭遇特殊字符导致问题的解决方法

<p>
        数据库查询中的特殊字符的问题<br>
        在进行数据库的查询时,会经常遇到这样的情况: <br>
          例如想在一个用户数据库中查询他的用户名和他的密码,但恰好该用户使用的名字和密码中有特殊的<br>
        字符,例如单引号,“|”号,双引号或者连字符“&amp;”。 <br>
          例如他的名字是1"test,密码是A|&amp;900 <br>
          这时当你执行以下的查询语句时,肯定会报错: <br><br>
        SQL = "SELECT * FROM SecurityLevel WHERE UID="" &amp; UserID &amp; """ <br>
        SQL = SQL &amp; " AND PWD="" &amp; Password &amp; """ <br>
          因为你的SQL将会是这样: <br><br>
        SELECT * FROM SecurityLevel WHERE UID="1"test" AND PWD="A|&amp;900" <br><br>
          在SQL中,"|"为分割字段用的,显然会出错了。现在提供下面的几个函数专门用来处理这些头疼的东西数据库 转义字符:</p>
<p class="codetitle">
        <span><u>复制代码</u></span> 代码如下:</p>
<p class="codebody">
        <br>
        Function ReplaceStr (TextIn, ByVal SearchStr As String, _<br>
        ByVal Replacement As String, _<br>
        ByVal CompMode As Integer)<br>
         Dim WorkText As String, Pointer As Integer<br>
         If IsNull(TextIn) Then<br>
          ReplaceStr = Null<br>
         Else<br>
          WorkText = TextIn<br>
          Pointer = InStr(1, WorkText, SearchStr, CompMode)<br>
          Do While Pointer &gt; 0<br>
           WorkText = Left(WorkText, Pointer - 1) &amp; Replacement &amp; _<br>
           Mid(WorkText, Pointer + Len(SearchStr))<br>
           Pointer = InStr(Pointer + Len(Replacement), WorkText, SearchStr, CompMode)<br>
          Loop<br>
          ReplaceStr = WorkText<br>
         End If<br>
        End Function<br><br>
        Function SQLFixup(TextIn)<br>
         SQLFixup = ReplaceStr(TextIn, """, """", 0)<br>
        End Function<br>
        Function JetSQLFixup(TextIn)<br>
         Dim Temp<br>
         Temp = ReplaceStr(TextIn, """, """", 0)<br>
         JetSQLFixup = ReplaceStr(Temp, "|", "" &amp; chr(124) &amp; "", 0)<br>
        End Function<br><br>
        Function FindFirstFixup(TextIn)<br>
         Dim Temp<br>
         Temp = ReplaceStr(TextIn, """, "" &amp; chr(39) &amp; "", 0)<br>
         FindFirstFixup = ReplaceStr(Temp, "|", "" &amp; chr(124) &amp; "", 0)<br>
        End Function</p>
<p>
        <br>
        有了上面几个函数后,当你在执行一个sql前,请先使用 <br><br>
        SQL = "SELECT * FROM SecurityLevel WHERE UID="" &amp; SQLFixup(UserID) &amp; """ <br>
        SQL = SQL &amp; " AND PWD="" &amp; SQLFixup(Password) &amp; """ </p>
頁: [1]
查看完整版本: 数据库查询中遭遇特殊字符导致问题的解决方法