我正在将几个硬编码到应用程序中并动态构建的查询转换为参数化查询。我在处理一个特定查询时遇到问题,该查询具有 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 注入(inject)攻击?
Best Answer-推荐答案
这在 MySQL 中是不可能的。 您可以创建所需数量的参数并执行 UPDATE ... IN (?,?,?,?)。这可以防止注入(inject)攻击(但仍然需要您为每个参数计数重建查询)。
另一种方法是传递一个逗号分隔的字符串并解析它。
关于带有 `in` 子句的 C# 参数化查询 MySQL,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/650455/
|