首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apostrophe的问题

Apostrophe的问题
EN

Stack Overflow用户
提问于 2009-11-07 22:16:49
回答 2查看 682关注 0票数 0

我有一个用动态SQl编写的进程,用于我的一个应用程序。它用来搜索申请者的姓氏。目前,它正在搜索申请者的姓氏的前2位或全名。但我在搜索姓氏中有Apostrophe的申请者时遇到了问题(例如O‘’Connor)。如果客户端尝试搜索带有O‘或O’‘Connor的申请者,则会抛出错误。他们想搜索每个申请人,无论他们的姓氏中有没有Apostrophe。请帮帮我,我试了所有的方法,但都不起作用。下面是我的搜索代码,在流程中使用它来拉取申请者:

必要时添加通配符

代码语言:javascript
复制
if Rtrim(@FirstName) <> ''
begin 
  If(Len(@FirstName) < 30) and (CharIndex('%', @FirstName) = 0) and @FirstName != ''
         Set @FirstName = char(39) + @FirstName + '%' + char(39)
end 

if Rtrim(@LastName) <> ''
begin 
   If(Len(@LastName) < 60) and (CharIndex('%', @LastName) = 0) and @LastName != ''
     Set @LastName = Char(39) + @LastName + '%' + char(39)
end

现在,根据输入参数以动态方式构建过滤器

代码语言:javascript
复制
if Rtrim(@LastName) <> ''
 select @Where = @Where + ' and a.LastName like '+ Rtrim(@LastName)
EN

回答 2

Stack Overflow用户

发布于 2009-11-07 22:24:12

在构建SQL字符串时,需要对输入字符串中的撇号进行转义(基本上将一个‘替换为两个'')

无论您选择在何处将用户输入传递到SQL server数据库,都需要注意这一点,因为这是一个安全问题(SQL注入攻击)。Bobby Tables

代码语言:javascript
复制
if Rtrim(@LastName) <> ''
 select @Where = @Where + ' and a.LastName like '+ Replace(Rtrim(@LastName),'''','''''') + ''
票数 3
EN

Stack Overflow用户

发布于 2011-11-22 08:55:36

我的建议是编写查询,使其包含用于过滤的备用列,并将撇号/单引号替换为任何特殊字符,如#。这使您可以保持原始列不变,以防您想要显示它。

要在SQL Server中做到这一点,您可以这样做:

代码语言:javascript
复制
Select
    tbl.strName_Last,
    REPLACE(tblOrder.strName_Last, '''','#')) as StrLastNameForFilter
  ....

然后将您的代码更改为基于此备用列进行筛选,并在用户提供的筛选字符串中,将撇号/单引号替换为特殊字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1693159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档