jiao120 发表于 2010-7-29 22:44:51

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:27

这个带单引号的sql语句其实跟VBS没什么太大的联系,主要是sql语句的特殊格式问题,楼主可以使用转义字符\'来替代原来的单引号。

skyzhu 发表于 2010-7-30 09:51:13

把x 里的单引号换成 2个

TIB 发表于 2010-7-30 09:58:41

"select * from navigate where name=" & Chr(39) & x & Chr(39)

feiyunkai 发表于 2010-7-30 09:59:59

用单引号转义

例如:
X="i'think"
修改为:
X="i''think"      
'单引号用单引号转义一下(X=“i‘‘think” )

jiao120 发表于 2010-7-30 11:15:14

回复 2# 的帖子

可是x里数据是变量啊,我也不能在每个测试数据里面输入转义字符啊?没有更好的别的办法吗

jiao120 发表于 2010-7-30 11:24:26

回复 5# 的帖子

我不想去更改x里面的数据,所以才很苦恼

jiao120 发表于 2010-7-30 11:28:16

回复 4# 的帖子

你是想将单引号用char(39)来代替吗?我试了,貌似还是不对,我再研究下位置

skyzhu 发表于 2010-7-30 13:43:51

回复 6# 的帖子

rst.open"select * from navigate where name='" & replace(x,"'","''") & "'"

yahuu 发表于 2010-7-30 16:45:39

vb中要使用sql语句
需要把其中的单引号用双引号引起来
如:
rst.open "select * from navigate where name= I"&"'"&"think"

feiyunkai 发表于 2010-7-30 17:23:08

9楼,好办法

msnshow 发表于 2010-7-30 20:40:35

学习了

sterson 发表于 2010-7-31 22:18:00

如果楼主不想修改x里的内容(I'think)
那么可以用replace函数
x=replace(x,"'","''")
在SQL的查询条件中加入单引号,各破坏SQL的语法,属于SQL注入范筹
严格来讲,如果加入单引号会出错,这样说明另一个程序的BUG,就是没有对查询条件进行过滤
系统存在SQL注入安全缺陷。

jiao120 发表于 2010-8-2 11:20:36

回复 9# 的帖子

问题解决了,十分的感谢啊!!!!!!!!

jiao120 发表于 2010-8-2 11:21:48

回复 13# 的帖子

恩,最后还是用了replace函数解决了问题。还是基础没有学好,谢谢赐教了
页: [1]
查看完整版本: sql语句中动态变量中间含有单引号,查询出错