为什么有人会在SQL子句中使用WHERE 1=1 AND <条件>(通过连接字符串获得的SQL,或者视图定义)
我在某个地方看到过,这将用于防止SQL注入,但这看起来非常奇怪。
如果有一个注入WHERE 1=1和注入OR 1=1将有相同的结果注入OR 1=1。
稍后编辑:视图定义中的用法如何?
谢谢你的回答。
尽管如此,
我不明白为什么有人会使用这种结构来定义视图,或者在存储过程中使用它。
举个例子:
CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 AND table.Field=Value
我通常在为一个有许多用户可以选择的下拉值的报告构建动态SQL时这样做。由于用户可以从每个下拉列表中选择值,也可以不选择,我们最终很难弄清楚哪个条件是第一个where子句。因此,我们在最后用where 1=1填充查询,并在其后添加所有where子句。
类似的
select column1, column2 from my table where 1=1 {name} {age};
然后我们将像这样构建where子句,并将其作为参数值传递
string name_whereClause= ddlName.SelectedIndex > 0 ? "AND name ='"+ ddlName.SelectedValue+ "'" : "";
由于我们在运行时不知道where子句的选择,所以这在查找是否包含“AND”或“where”方面帮助我们很大。