Postgres sqlx准备语句与表名绑定变量。

huangapple go评论85阅读模式
英文:

Postgres sqlx prepared statement with table name bindvar

问题

我正在尝试使用Golang的sqlx库创建一个预处理语句。我希望表名是一个绑定变量。

stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;")

然而,这给了我一个关于/$1/的语法错误。我不能在表名中使用绑定变量吗?

英文:

I am trying to create a prepared statement in using the Golang sqlx library. I want to have the table name be a bindVar

stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;")

However this gives me an syntax error around /$1/. Can I not use a bind var for the table name?

答案1

得分: 6

你可以不使用绑定变量作为表名吗?

不可以,引用来源

参数只能用作数据值,而不能用作标识符。因此,下面的用法是合理的:

INSERT INTO mytable VALUES ($1);

但是下面的用法是不起作用的:

INSERT INTO $1 VALUES (42);

但是,如果你想要在表名中使用fmt.Sprintf,你可以将$1、$2等保留给数据值。

英文:

> Can I not use a bind var for the table name?

No, source of quote.

> The arguments can only be used as data values, not as identifiers.
> Thus for example this is reasonable:
>
> INSERT INTO mytable VALUES ($1);
>
> but this will not work:
>
> INSERT INTO $1 VALUES (42);

But you can use fmt.Sprintf for the table name if you want but leave the $1, $2, ... for the data values.

答案2

得分: 0

请参考以下页面获取通用解决方案:

http://www.postgresql.org/docs/9.1/static/ecpg-dynamic.html

英文:

See this page for a general solution:

http://www.postgresql.org/docs/9.1/static/ecpg-dynamic.html

huangapple
  • 本文由 发表于 2014年9月3日 03:35:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/25631006.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定