Что бы там ни было, параметры могут использоваться только для литеральных констант внутри запроса. Обычно это значения сравнения в предложении where
, иногда константы в предложениях select
или set
- и реже в других частях запроса.
Идентификаторы не являются буквальными константами. На самом деле, ни одно из следующего:
- имена баз данных, таблиц и столбцов
- имена функций
- операторы (например,
+
)
- ключевых слов (например,
asc
/ desc
в order by
)
К сожалению, чтобы реализовать их «динамически», вам нужно изменить строку запроса, непосредственно изменив строку. Это довольно отвратительно, но альтернативы нет.
Одним из преимуществ этого подхода является то, что он позволяет базе данных сохранять, а затем повторно использовать план запроса. Исключение фазы компиляции может быть важным приростом производительности для очень быстрых запросов.
EDIT:
Я действительно не знаю, иди, но идея такова:
sql := "UPDATE `test` SET [col] = ? WHERE id = ?"
sql = strings.replace(sql, "[col]", "score")
stmt, err := db.Prepare(sql)
CheckErr(err)
_, err = stmt.Exec(value, id)
Другими словами, напрямую измените строку запроса для идентификаторов. Продолжайте использовать параметры для значений.