搜索功能无法正常工作
本文关键字:工作 常工作 功能 搜索 | 更新日期: 2023-09-27 18:18:53
我有一个函数,调用一个名为"name"的参数,现在它工作得很好。直到我做一个搜索,其中有一个' ..所以我把它作为名字
发送Plastic & Foam 3'X5' XLT
当我发送它返回空的网站(没有错误),但如果我发送只是Plastic & Foam
它工作正常,它回来的好。在sql部分中,当我像这样通过管理工作室发送查询时我得到了这个
exec sp_productSearch 'Plastic & Foam 3''X5'' XLT'
SELECT Name FROM PProducts WHERE NAME LIKE '%Plastic & Foam 3'X5' XLT'
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'X5'.
在c#中,我发送文本列表this
Server.HtmlEncode(txtproductname.Text.Trim().Replace("'", "''"))
你知道我可能做错了什么吗?
PS:存储过程很简单,就像这样Select Name from PProducts Where NAME LIKE '%' + @NAME + '%' ;
谢谢。
您正在传递'
字符"raw"到SQL中的查询?你正面临一个叫做SQL注入的问题。
请找出一个解决方案传递数据"安全"到你的SQL服务器。对于c#,你应该检查eg。
看起来你已经有了一个名为@NAME
的参数
所以存储过程只需要执行
SELECT Name
FROM PProducts
WHERE NAME LIKE '%' + @NAME + '%'
或者,更好的是,如果您的任何产品名称包含模式字符(如%
),则返回正确的结果,根本不使用LIKE
,而使用
SELECT Name
FROM PProducts
WHERE CHARINDEX(@NAME,NAME) > 0
或者,更好的是,使用全文搜索
我假定您正在存储过程中构建查询字符串,然后执行它。根据你到目前为止发布的内容,这是不必要的,并且存在SQL注入风险。
也不要手动转义txtproductname.Text
值。
EDITED
你问题的最后一部分有点吓人
Select Name from PProducts Where NAME LIKE ''%' + @NAME + '%'''
我想知道为什么你使用这么多引号,你可以通过字符串连接执行SQL:
EXEC 'Select Name from PProducts Where NAME LIKE ''%' + @NAME + '%'''
如果是这种情况,一个快速/肮脏的解决方法是转义引号两次,意思是:
EXEC sp_productSearch 'Plastic & Foam 3''''X5'''' XLT'
这条语句应该没有问题运行,但这是一个非常糟糕的方式来执行SQL查询与用户输入。其他答案已经涵盖了。
在另一个注意事项,&
变成&
的调用Html编码根据这个页面,所以也要小心。