51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7485|回复: 14
打印 上一主题 下一主题

[原创] sql语句中动态变量中间含有单引号,查询出错

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-7-29 22:44:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
dim x
x=DataTable("title","add")'将数据表中title列的当前值取出

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

之间我也上网查找了一些资料。有转义字符的也有参数的,但还是很不明白,该如何解决。希望可以有人指点,由于vb语句不太了解,希望可以详细说明,真的十分感谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2010-8-2 11:21:48 | 只看该作者

回复 13# 的帖子

恩,最后还是用了replace函数解决了问题。还是基础没有学好,谢谢赐教了
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2010-8-2 11:20:36 | 只看该作者

回复 9# 的帖子

问题解决了,十分的感谢啊!!!!!!!!
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-4-22 12:50
  • 签到天数: 393 天

    连续签到: 1 天

    [LV.9]测试副司令

    13#
    发表于 2010-7-31 22:18:00 | 只看该作者
    如果楼主不想修改x里的内容(I'think)
    那么可以用replace函数
    x=replace(x,"'","''")
    在SQL的查询条件中加入单引号,各破坏SQL的语法,属于SQL注入范筹
    严格来讲,如果加入单引号会出错,这样说明另一个程序的BUG,就是没有对查询条件进行过滤
    系统存在SQL注入安全缺陷。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    12#
    发表于 2010-7-30 20:40:35 | 只看该作者
    学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2010-7-30 17:23:08 | 只看该作者
    9楼,好办法
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2010-7-30 16:45:39 | 只看该作者
    vb中要使用sql语句
    需要把其中的单引号用双引号引起来
    如:
    rst.open "select * from navigate where name= I"&"'"&"think"
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2010-7-30 13:43:51 | 只看该作者

    回复 6# 的帖子

    rst.open"select * from navigate where name='" & replace(x,"'","''") & "'"
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
     楼主| 发表于 2010-7-30 11:28:16 | 只看该作者

    回复 4# 的帖子

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

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2010-7-30 11:24:26 | 只看该作者

    回复 5# 的帖子

    我不想去更改x里面的数据,所以才很苦恼
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2010-7-30 11:15:14 | 只看该作者

    回复 2# 的帖子

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    5#
    发表于 2010-7-30 09:59:59 | 只看该作者

    用单引号转义

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

    使用道具 举报

    该用户从未签到

    4#
    发表于 2010-7-30 09:58:41 | 只看该作者
    "select * from navigate where name=" & Chr(39) & x & Chr(39)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2010-7-30 09:51:13 | 只看该作者
    把x 里的单引号换成 2个
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
    发表于 2010-7-30 09:42:27 | 只看该作者
    这个带单引号的sql语句其实跟VBS没什么太大的联系,主要是sql语句的特殊格式问题,楼主可以使用转义字符\'来替代原来的单引号。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-10 21:31 , Processed in 0.088759 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表