我有一个过滤器对象来查询一个包含许多列的表,而不是像这样编写一个覆盖所有列的条件(允许可选过滤):
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 服务后面。