在进行数据库的查询时,会经常遇到这样的情况:
例如想在一个用户数据库中查询他的用户名和他的密码,但恰好该用户使用的名字和密码中有特殊的字符,例如单引号,“”号,双引号或者连字符“&”。
例如他的名字是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)
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) & "'"
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器