51Testing软件测试论坛

标题: sql语句中动态变量中间含有单引号,查询出错 [打印本页]

作者: jiao120    时间: 2010-7-29 22:44
标题: sql语句中动态变量中间含有单引号,查询出错
dim x
x=DataTable("title","add")'将数据表中title列的当前值取出

dim conn,rst
中间为数据库连接语句。此处省略了
rst.open“select * from navigate where name=‘“ & x & ”’”,conn'此处为方便查看,将单引双引号用中文状态下书写
在x变量为正常字符串时,都可以成功查询。但当x为含有单引号的字符串,例如“i'think”。系统会报错,说语法存在问题。

之间我也上网查找了一些资料。有转义字符的也有参数的,但还是很不明白,该如何解决。希望可以有人指点,由于vb语句不太了解,希望可以详细说明,真的十分感谢
作者: ziheng198688    时间: 2010-7-30 09:42
这个带单引号的sql语句其实跟VBS没什么太大的联系,主要是sql语句的特殊格式问题,楼主可以使用转义字符\'来替代原来的单引号。
作者: skyzhu    时间: 2010-7-30 09:51
把x 里的单引号换成 2个
作者: TIB    时间: 2010-7-30 09:58
"select * from navigate where name=" & Chr(39) & x & Chr(39)
作者: feiyunkai    时间: 2010-7-30 09:59
标题: 用单引号转义
例如:
X="i'think"
修改为:
X="i''think"      
'单引号用单引号转义一下(X=“i‘‘think” )
作者: jiao120    时间: 2010-7-30 11:15
标题: 回复 2# 的帖子
可是x里数据是变量啊,我也不能在每个测试数据里面输入转义字符啊?没有更好的别的办法吗
作者: jiao120    时间: 2010-7-30 11:24
标题: 回复 5# 的帖子
我不想去更改x里面的数据,所以才很苦恼
作者: jiao120    时间: 2010-7-30 11:28
标题: 回复 4# 的帖子
你是想将单引号用char(39)来代替吗?我试了,貌似还是不对,我再研究下位置
作者: skyzhu    时间: 2010-7-30 13:43
标题: 回复 6# 的帖子
rst.open"select * from navigate where name='" & replace(x,"'","''") & "'"
作者: yahuu    时间: 2010-7-30 16:45
vb中要使用sql语句
需要把其中的单引号用双引号引起来
如:
rst.open "select * from navigate where name= I"&"'"&"think"
作者: feiyunkai    时间: 2010-7-30 17:23
9楼,好办法
作者: msnshow    时间: 2010-7-30 20:40
学习了
作者: sterson    时间: 2010-7-31 22:18
如果楼主不想修改x里的内容(I'think)
那么可以用replace函数
x=replace(x,"'","''")
在SQL的查询条件中加入单引号,各破坏SQL的语法,属于SQL注入范筹
严格来讲,如果加入单引号会出错,这样说明另一个程序的BUG,就是没有对查询条件进行过滤
系统存在SQL注入安全缺陷。
作者: jiao120    时间: 2010-8-2 11:20
标题: 回复 9# 的帖子
问题解决了,十分的感谢啊!!!!!!!!
作者: jiao120    时间: 2010-8-2 11:21
标题: 回复 13# 的帖子
恩,最后还是用了replace函数解决了问题。还是基础没有学好,谢谢赐教了




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2