哪个SQL查询在SQL注入方面更安全

我有两个SQL查询,其中每次调用查询时我都试图分别用+1和-1更新supopp值。

第一个查询:

  query=update disc set sup=@sup, opp=@opp where did=@did int sup=getnoofsup(did); int opp = getnoofopp(did); com.Parameters.AddWithValue("@sup", sups + 1); com.Parameters.AddWithValue("@opp", opps - 1); com.Parameters.AddWithValue("@did", did); com.ExecuteNonQuery(); 

第二个查询

 string query="update disc set sup=sup+1, opp=opp-1 where did=@did" ; com.Parameters.AddWithValue("@did", did); com.ExecuteNonQuery(); 

第二次注射查询是否有任何威胁,因为我用sup+1交换@sup

不,第二个查询与第一个查询一样安全,因为它是完全参数化的,因此不会提供外部数据可以通过其输入SQL查询本身文本的路径。 sup+1表达式由RDBMS计算,而不是由您的程序*计算 ,因此它无法提供将新代码注入现有SQL的机会。


*并且随后不会将其呈现给SQL的exec存储过程以进行重新解释。

这两个查询对Sql Injection同样安全,但是

 com.Parameters 

总是优选的。

第二个查询更好。

 string query="update disc set sup=sup+1, opp=opp-1 where did=@did" ; com.Parameters.AddWithValue("@did", didparameter); com.ExecuteNonQuery(); 

这两个查询都是安全的,但第二个更优选,因为你不需要添加额外的parameter 。 在第一个查询中,你找到你不需要的supopp的值。