Mr *_*ubs 7 sql postgresql data-access-layer npgsql
我有一个过滤器对象来查询具有许多列的表,而不是写一个覆盖所有列的条件(允许可选的过滤),如下所示:
WHERE ((:value0 IS NULL) OR (column_name0 = :value0)) AND ((:value1 IS NULL) OR (column_name1 = :value1)) AND... etc
Run Code Online (Sandbox Code Playgroud)
对于每一列.相反,我理想情况下我希望能够将字段名称作为参数传递:
WHERE :column_name0 = :value0 AND column_name1 = :value1 AND... etc
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为在解析时需要列(类似于此处给出的答案).
你怎么克服这个? - 我真的不想在添加或删除新列时维护SQL(正如我在第一个例子中所做的那样),我认为将列名直接构造到命令字符串中会很危险因为这可能允许sql注入.
请注意,此代码位于Web服务之后.
Eel*_*lke 23
只是确保最终用户不能直接提供列名,并且在手动构建查询时应该是安全的.如果需要在运行时找出哪些列名有效,可以使用以下查询:
SELECT column_name
FROM information_schema.columns
WHERE table_schema='public' AND table_name='yourtablename'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17861 次 |
最近记录: |