[英]SQL Query wildcard search
我正在写一个与列表视图绑定的C#网页。 我的客户希望能够输入可显示结果的某些内容或部分内容。 例如,他想要一个文本框,他可以在其中输入电话号码,电话号码的一部分,姓名,城市或其他任何东西,然后会找到一种SP,然后列出信息。 如何在SQL Sp或VS 2010中完成此操作?
SELECT cols FROM tbl WHERE field LIKE '%' + @input + '%'
正如其他几个人所建议的那样,使用LIKE运算符。
但是,不要像其他人建议的那样直接将用户输入的数据放入LIKE子句中。 这导致了一个非常简单且非常危险的漏洞,称为SQL注入攻击。
如果直接插入用户的输入
SELECT cols FROM tbl WHERE field LIKE '%' + input + '%'
然后用户可以将以下内容放在文本框中:
; DROP TABLE tbl; -
(作为示例),这使您的SQL语句变为:
SELECT cols FROM tbl WHERE field LIKE '%'; (the first part of your query)
DROP TABLE tbl; (the injected sql that you don't want to let people run; drop the database table)
-- '%' (the rest of your previous query is commented out)
始终确保使用参数化SQL语句,或者至少清理输入。 您真的不希望人们能够在您的数据库服务器上运行任意SQL。
大多数人都遇到了部分解决方案 - 使用LIKE运算符。
但我认为问题的另一个方面可以在SQL中解决。
创建计算的varchar(MAX)列。 在此字段上启用全文索引。 然后你需要做的就是做一个像这样的SQL:
SELECT * from <TABLE_NAME> WHERE Keywords like '%<search term>%'
这样您就不必phone like <search>
这样的phone like <search>
或name like <search>
。
使用LIKE
运算符。
SELECT * FROM Table WHERE PhoneNumber LIKE '%value%' OR Name LIKE '%value%' OR
City LIKE '%value%'
如果要使用一个可能包含许多不同类型数据的文本框 ,则需要在代码中具体说明要搜索的数据库表和列以及顺序。
例如,您可以编写一个执行此操作的查询:
从中可以看出, 为每个搜索条件设置单独的文本框要容易得多 。 一个文字框用于名字,另一个用于姓氏,第三个用于公司名称。 电话号码的单独文本框。 如果您要为客户,供应商,员工等混合数据,您应该让用户指示(可能在下拉列表或复选框上)要搜索哪些类型的人,以便您知道要查询的表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.