解决ASP执行DB查询中的特殊字符问题

2016-01-29 18:55 11 1 收藏

解决ASP执行DB查询中的特殊字符问题,解决ASP执行DB查询中的特殊字符问题

【 tulaoshi.com - ASP 】

 

作者:csbq

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

  在进行数据库的查询时,会经常遇到这样的情况:
  例如想在一个用户数据库中查询他的用户名和他的密码,但恰好该用户使用的名字和密码中有特殊的字符,例如单引号,“|”号,双引号或者连字符“&”。

  例如他的名字是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中,"|"为分割字段用的,显然会出错了。现在提供下面的几个函数,专门用来处理这些头疼的东西:
Function ReplaceStr (TextIn, ByVal SearchStr As String, _

  ByVal Replacement As String, _

  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)

Do While Pointer 0

  WorkText = Left(WorkText, Pointer - 1) & Replacement & _

  Mid(WorkText, Pointer + Len(SearchStr))

  Pointer = InStr(Pointer + Len(Replacement), WorkText, _

  SearchStr, CompMode)

Loop

  ReplaceStr = WorkText

End If

End Function


Function SQLFixup(TextIn)

  SQLFixup = ReplaceStr(TextIn, "'", "''", 0)

End Function


Function JetSQLFixup(TextIn)

  Dim Temp

  Temp = ReplaceStr(TextIn, "'", "''", 0)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

  JetSQLFixup = ReplaceStr(Temp, "|", "' & chr(124) & '", 0)

End Function


Function FindFirstFixup(TextIn)

  Dim Temp

  Temp = ReplaceStr(TextIn, "'", "' & chr(39) & '", 0)

  FindFirstFixup = ReplaceStr(Temp, "|", "' & chr(124) & '", 0)

End Function


  有了上面几个函数后,当你在执行一个sql前,请先使用:
  SQL = "SELECT * FROM SecurityLevel WHERE UID='" & SQLFixup(UserID) & "'"
  SQL = SQL & " AND PWD='" & SQLFixup(Password) & "'"

 

来源:http://www.tulaoshi.com/n/20160129/1507772.html

延伸阅读
标签: ASP
  在我开发BS结构程序中,由于经常需要在ORACLE中处理一些容量较大的文本数据,所以经过反复测试终于用ASP成功解决了大文本数据在ORACLE下存取问题。 一、运行环境: 1、Microsoft Windows 2000 Server + IIS 5.0 2、Oracle8i中文标准版 二、建立数据表: CREATE TABLE SYSTEM.TEST( BLOB LONG, ID NUMBE...
标签: Web开发
我对PHP的正则表达式不太熟悉      在使用eregi_replace()函数时发现带有()的字符串不能进行替换,看了手册还是糊里糊涂      比如      将   DIN   1693(Pt.2)-1997   加粗      使...
标签: ASP
1. 字符串函数: Len(str):取得字符串的长度 Instr(str1,str2):从字符串str1,寻找另一个字符串str2第一个出现的位置 Left(str,n):从字符串str左起取n个字符 Right(str,n):从字符串str右起取n个字符 Mid(str1,n1,n2):从字符串第n1个字符开始,取出n2个字符。 2.字符串函数应用: 1)通过字符函数设计出一个字符串长度控制函数: 防止超过行宽字符...
我在写一个查询条件时的问题如下: 如我想写一个字段中包含“李”字的所有记录 ?$str="李"; select * from table where field like ''%?$str%'' ; 显示的记录中除了包含”李”字的记录,还有不包含“李”字的记录。为什么? 在MySQL中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在MySQL的很...
标签: SQLServer
  只要使用with (nolock)即可! SELECT au_lname FROM authors WITH (NOLOCK)  

经验教程

903

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部