dtef9322 2017-09-19 19:11
浏览 3
已采纳

如何与数据库/ sql lib一起使用COALESCE?

I'm trying to pass arguments into a postgres sql statement that are injection safe.

I’m having a bit of trouble with passing in arugements using DB.Query of the database/sql package in Go.

This is what Postgres registers

STATEMENT:  SELECT mc.company_name_full, msc.company_id, msc.cdate, msc.value->>'n_rules', msc.value->>'pct_interfaces_classified'
                  FROM mn_company AS mc INNER JOIN mn_statistics_company AS msc
                      ON (mc.id = msc.company_id)
                  WHERE (msc.value->>'n_rules')::int>0 AND (msc.value->>'pct_interfaces_classified')::int>0  AND
                      msc.company_id = COALESCE('$1', msc.company_id) AND
                      mc.company_name_full ~* COALESCE('$2', mc.company_name_full) AND
                      msc.cdate >= COALESCE('$3', 2017-07-01) AND
                  msc.cdate <= COALESCE('$4', 2017-09-19)

This is my function call

rows, err := a.DB.Query(*query, qf.companyIDFilter, qf.companyNameFilter, firstDate, secondDate)

all arguments that are being pasted into a.DB.Query are pointers.

I’m trying to replaces the $1, $2,… with arguments

  • 写回答

1条回答 默认 最新

  • dotwc62080 2017-09-20 02:49
    关注

    Remove the quotes from around the placeholders ($1, $2, ...):

    query := `SELECT mc.company_name_full, msc.company_id, msc.cdate, msc.value->>'n_rules', msc.value->>'pct_interfaces_classified'
                      FROM mn_company AS mc INNER JOIN mn_statistics_company AS msc
                          ON (mc.id = msc.company_id)
                      WHERE (msc.value->>'n_rules')::int>0 AND (msc.value->>'pct_interfaces_classified')::int>0  AND
                          msc.company_id = COALESCE($1, msc.company_id) AND
                          mc.company_name_full ~* COALESCE($2, mc.company_name_full) AND
                          msc.cdate >= COALESCE($3, 2017-07-01) AND
                      msc.cdate <= COALESCE($4, 2017-09-19)`
    

    The lib/pq package automatically adds the quotes where needed.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题