Ошибка драйвера golang mysql при замене параметра - PullRequest
0 голосов
/ 20 апреля 2019

ОС Mojave, MySQL v8.0.15, go 1.12.3 darwin / amd64

import (
    "database/sql"

    // import mysql driver anonymously (just run the init)
    _ "github.com/go-sql-driver/mysql"
)

...

_, err = db.db.Exec("USE ?", "test")
if err != nil {
    return errors.Wrapf(err, "error selecting database %s", opt.Database)
}

_, err = db.db.Prepare("SELECT value FROM ? WHERE key = ?")
if err != nil {
    return errors.Wrap(err, "error generating SELECT statement")
}

Я получаю ошибку error selecting database test: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

Я получаю ту же ошибку (о синтаксисе вокруг'?') для замены любого параметра, который я пытаюсь сделать.Я проверил руководство, а также учебники и примеры, которые я нашел в Интернете, и не могу точно сказать, что я делаю неправильно.

Если я заменю '?' На значения (строки), то все будет работать нормально.

1 Ответ

3 голосов
/ 20 апреля 2019

Вопросительные знаки ? в подготовленных выражениях предназначены для значений, а не для имен таблиц, баз данных или столбцов.

Используйте fmt.Sprintf для заполнения значений, связанных со структурой базы данных.

Пример:

_, err := db.db.Prepare(fmt.Sprintf("SELECT value FROM %s WHERE key = ?", table))
...