我有以下sql查询:
SQL = "SELECT * FROM Product =“& Request.QueryString("CategoryId")
此查询告诉您从一个类别中获取所有产品。我想要的能力,使产品可以来自某些类别,而不是从一个类别。
因此,我将Product.ProductCategoryId字段更改为varchar(50),并用逗号分隔了一些类别id,例如:
1,5,7,4
现在,如何在SQL查询中使其工作?在ASP中有拆分和包含(http://www.devx.com/vb2themax/Tip/18364)函数,但是我如何在SQL中做到这一点?
谢谢,英语很抱歉..。
发布于 2009-10-07 19:58:46
必须注意:永远不要将用户提供的数据连接到SQL查询中;您将面临SQL注入攻击。
我之前的回答(使用"IN")是基于一个错误的想法,即您从用户那里收集多个IN,并针对一个值的列进行搜索。但是你做的正好相反--列有多个值,并且你试图匹配来自用户的一个值。
这是个不好的方法。不要使用逗号分隔的值;添加一个具有一对多关系的新表。然后,查询将类似于
SQL = "SELECT Product.* FROM Product, ProductCategory WHERE ProductCategory.ProductId=Product.ID AND ProductCategory.CategoryId = " & Request.QueryString("CategoryId")如果您真的想做逗号分隔的事情,可以使用LIKE和%通配符进行搜索,但是它是脆弱的(例如,您必须确保ID "2“与”12“不匹配)。
发布于 2009-10-07 19:57:51
这不是免费的,但是WHERE ProductCategoryId = " & Request.QueryString("CategoryId")是一种非常糟糕的查询方式。
你刚刚对疯狂的SQL注入攻击敞开心扉。
发布于 2009-10-07 19:57:19
http://www.sommarskog.se/arrays-in-sql.html
https://stackoverflow.com/questions/1533822
复制相似问题