英文:
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:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论