Postgres sqlx准备语句,表名为bindvar
我试图使用Golang sqlx库创建一个准备好的语句。我希望表名为bindVarPostgres sqlx准备语句,表名为bindvar,sql,postgresql,go,prepared-statement,Sql,Postgresql,Go,Prepared Statement,我试图使用Golang sqlx库创建一个准备好的语句。我希望表名为bindVar stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;") 但是,这给了我一个关于/$1/的语法错误。我可以不对表名使用绑定变量吗 我可以不对表名使用绑定变量吗 不, 参数只能用作数据值,不能用作标识符。 因此,例如,这是合理的: INSERT INTO mytable VALUES ($1); 但这是行不通的: INSERT
stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;")
但是,这给了我一个关于/$1/
的语法错误。我可以不对表名使用绑定变量吗
我可以不对表名使用绑定变量吗
不,
参数只能用作数据值,不能用作标识符。
因此,例如,这是合理的:
INSERT INTO mytable VALUES ($1);
但这是行不通的:
INSERT INTO $1 VALUES (42);
但是如果需要,您可以使用
fmt.Sprintf
作为表名,但保留$1、$2、。。。有关数据值。有关一般解决方案,请参阅本页:
但是
fmt.Sprintf
了解标识符引用规则吗?数据库接口中应该有一个专门用于正确引用标识符的函数。@muistooshort否,仅用于表名。我想您误解了。标识符(如表名和列名)的引用和转义规则与字符串不同。数据库接口中应该有知道如何正确引用标识符的函数。我通常有简单的表名,所以我不确定转义规则。