You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang调用sql包Query方法时遭遇SQL语法错误求助

PostgreSQL 表名占位符报错解决

问题代码与错误

代码:

rows, err := r.db.Query(`SELECT * FROM ?`, couriersTable)

运行报错:

pq: syntax error at or near "?"

尝试替换为%s后问题依旧。

原因与解决方案

PostgreSQL的参数占位符(包括?或pq驱动标准的$1)仅支持替换数据值,不能用于替换表名、列名这类SQL标识符。

解决方式:

  • 安全拼接表名:如果表名是可控的(非用户输入),可以直接拼接,但建议用pq.QuoteIdentifier做转义,避免标识符包含特殊字符或注入风险:
import "github.com/lib/pq"

// 转义表名,避免语法错误和注入
safeTable := pq.QuoteIdentifier(couriersTable)
query := fmt.Sprintf(`SELECT * FROM %s`, safeTable)
rows, err := r.db.Query(query)
  • 校验表名合法性:如果表名来自用户输入,必须先校验是否在预设的允许列表中,再进行拼接转义,彻底杜绝SQL注入风险。

内容的提问来源于stack exchange,提问作者Vladimir Chizh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:04:56