我有一个过滤器对象用于查询具有许多列的表,而不是像这样编写涵盖所有列的条件(允许可选过滤):
WHERE ((:value0 IS NULL) OR (column_name0 = :value0)) AND ((:value1 IS NULL) OR (column_name1 = :value1)) AND... etc
对于每一列,我希望能够通过参数传递字段名称:
WHERE :column_name0 = :value0 AND column_name1 = :value1 AND... etc
由于列在解析时是必需的(类似于此处所述),因此这是不可能的。
那么你该如何克服这个问题呢? - 我并不想在添加或删除新列时维护SQL语句(就像在我的第一个示例中一样),而且我认为将列名直接构建到命令字符串中可能会导致SQL注入,这对我来说是很危险的。
请注意,此代码位于Web服务后面。