为什么不能在SQL语句中使用参数作为列名?经过两个小时的思考,我发现了问题所在。似乎唯一可行的方法就是这样做,使其容易受到SQL注入的攻击(对我来说这不是问题,因为参数是在服务器端生成的。)
这有效:
string cmdgetValues = "SELECT " + column + " FROM user WHERE " + filterColumn + " = @filter";
MySqlCommand getValues = new MySqlCommand(cmdgetValues, connectionDB);
getValues.Parameters.AddWithValue("@filter", filterValue);
这不起作用:
string cmdgetValues = "SELECT @column FROM user WHERE @filterColumn = @filter";
MySqlCommand getValues = new MySqlCommand(cmdgetValues, connectionDB);
getValues.Parameters.AddWithValue("@column", column);
getValues.Parameters.AddWithValue("@filterColumn", filterColumn);
getValues.Parameters.AddWithValue("@filter", filterValue);
这是为什么?是故意的吗?
答案 0 :(得分:1)
因为select
列是基本查询
您无法参数化基本查询,因此必须在代码处构建查询。
如果您想确定查询列的运行时间,也许可以尝试在Mysql中使用Prepared SQL Statement Syntax。