由于参数限制而构建动态查询
在执行涉及动态列名的查询时,开发者可能会遇到列名无法参数化的限制。要避免此问题,必须在运行时动态构建查询。
考虑以下非工作示例:
SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; "); prikaz.Parameters.AddWithValue("name", name); prikaz.Parameters.AddWithValue("slot", slot);
作为替代方案,将“槽”输入列入白名单防止注入攻击并按如下方式构建查询:
// TODO: verify that "slot" is an approved/expected value SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ") prikaz.Parameters.AddWithValue("name", name);
这种方法确保“@name”保持参数化,同时动态处理变量列名字。
以上是当列名可变时,如何动态构建具有参数化值的 SQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!