MySqlParameter作为TableName
我想使用MySqlParameter
将tableName传递给查询(以防止slq注入)
MySqlCommand cmd = new MySqlCommand("select * from @table"), cn) cmd.Parameters.AddWithValue("@table",TableName);
但这不起作用。 如何将tableName作为参数传递
PS我试图改变@
到?
– 不工作
您不能将表名作为参数传递。 您必须使用动态SQL来执行此操作,因此您必须使用字符串浓度来执行此操作
MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)
但是因为用户输入了tableName,所以可以进行SQL注入。 在查询任何表之前,您可以使用此SQL来确定该表是否存在:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'databasename' AND table_name = 'tablename';
(您可以完美地参数化此查询,因此将消除SQL注入)
通常,请注意SQL注入。 但是如果你使用这个内部(不暴露给用户),那么SQL注入不应该是问题。
更好的是,您可以构建一个存储过程来处理这个问题,如我的另一个答案:
使用LINQ的Unified SQL getter