Sql server 在ms sql server上进行全文搜索时,如何处理用户输入?

Sql server 在ms sql server上进行全文搜索时,如何处理用户输入?,sql-server,full-text-search,user-input,Sql Server,Full Text Search,User Input,我在ms sql server上有一个简单的搜索机制,它使用全文“contains”。 我直接从用户的输入(通过asp.net网站)将搜索值作为参数传递给contains谓词。问题是我在各种情况下都会遇到sql异常: -当用户输入两个单词时,如“simple case” -当用户将qoute添加到搜索值时,如“测试” 我使用如下查询进行了测试: declare @val nvarchar(40) set @val = N'test"' -- or 'simple case' select x.

我在ms sql server上有一个简单的搜索机制,它使用全文“contains”。 我直接从用户的输入(通过asp.net网站)将搜索值作为参数传递给contains谓词。问题是我在各种情况下都会遇到sql异常: -当用户输入两个单词时,如“simple case” -当用户将qoute添加到搜索值时,如“测试”

我使用如下查询进行了测试:

declare @val nvarchar(40)
set @val = N'test"' -- or 'simple case'

select x.* FROM xx as x
where CONTAINS(x.[name], @val)
通常我会得到:“全文搜索条件‘xxx’中‘xxx’附近的语法错误。”问题是,我希望允许用户使用‘*’、‘或’和‘和’条件进行高级查询

如何处理用户输入?
您是否使用qoutename值?

根据您遇到的错误,我认为您没有在查询中使用参数。这非常危险,允许您的用户执行sql注入


现在,关于你的问题,我认为最好的选择是为你设置两种文本输入类型,一种用于普通用户,另一种用于高级用户,这样你就可以知道在哪里解析高级查询。

在我们的应用程序中,我们使用自己的简单查询语言进行用户输入:只需操作数(带有可选通配符的单词或短语)、运算符(AND,OR,NOT)和括号

我们解析用户输入,将其分解为各个组成部分,并检查语法等

如果我们对输入的有效性感到满意,我们将其重新构建为等效的
CONTAINS
条件,并将其作为参数发送到搜索存储过程。因为我们自己创建了条件,所以我们知道它在语法上是正确的


如果用户输入无效,则我们可以向用户返回一条有意义的错误消息,而无需连接到数据库。

几年前,我使用此功能构建了一个应用程序;我所做的是,前端为您提供了一个文本框,用于键入您的术语,并且它有一个下拉列表,可在以下几个选项之间进行选择:

<option selected value="AND">All of the words entered</option>
<option value="OR">Any of the words entered</option>
<option value="ALL">The exact phrase entered</option>

这正是我期待的答案。你能提供代码示例或链接。。。