2014-09-02 80 views
0

我想在使用Golang sqlx庫中創建一個準備語句。我想有表名是bindVarPostgres sqlx準備語句與表名bindvar

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

但是這給了我周圍的/$1/語法錯誤。我可以不使用表名的綁定變量?

回答

0

我可以不使用綁定var的表名?

否,source of quote.

參數可以僅被用作數據值,而不是作爲標識符。 因此,例如,這是合理的:

INSERT INTO mytable VALUES ($1); 

,但是這是行不通的:

INSERT INTO $1 VALUES (42); 

但是你可以使用fmt.Sprintf表名,如果你想,但離開了$ 1,$ 2。 ..爲數據值。

+0

但不'fmt.Sprintf'瞭解標識的引用規則?數據庫接口中應該有一個專門用於正確引用標識符的函數。 – 2014-09-02 20:05:10

+0

@ muistooshort不,只是表名。 – 2014-09-02 20:05:42

+0

我想你誤會了。標識符(如表名和列名)具有與字符串不同的引用和轉義規則。在數據庫接口中應該有一些函數知道如何正確引用標識符。 – 2014-09-02 20:17:44