我正在将几个硬编码的查询转换为应用程序并立即构建到参数化查询.我遇到一个特定查询的问题,它有一个in
子句:
UPDATE TABLE_1 SET STATUS = 4 WHERE ID IN (1, 14, 145, 43);
第一个参数很简单,因为它只是一个普通的参数:
MySqlCommand m = new MySqlCommand("UPDATE TABLE_1 SET STATUS = ? WHERE ID IN (?);"); m.Parameters.Add(new MySqlParameter("", 2));
但是,第二个参数是一个整数列表,表示需要更新的行的ID.如何传递单个参数的整数列表?或者,您将如何设置此查询,以便您不必在每次调用它时完全构建它,并且可以防止SQL注入攻击?
这在MySQL中是不可能的.您可以创建所需数量的参数并执行UPDATE ... IN(?,?,?,?).这可以防止注入攻击(但仍然需要您为每个参数计数重建查询).
其他方法是传递逗号分隔的字符串并解析它.