Выполнение другого запроса MySQL с использованием Golang - PullRequest
0 голосов
/ 23 октября 2018

Я использую Go 1.9 и вижу, что нигде не прописано использование следующего синтаксиса

func main() {
dsn := DB_USER + ":" + DB_PASS + "@" + DB_HOST + "/" + DB_NAME + "?charset=utf8"
db, err := sql.Open("mysql", dsn)
if err != nil {
    log.Fatal(err)
}
defer db.Close()

q := "call regWorker('Thuto', 'Deere4454de', 'fueqx@mdj4f.com', '8725554675364', '94874256443', @outarg)"

_, err = db.Exec(q)
if err != nil {
    log.Fatal(err)
}'

Что мне показалось странным, так это то, что он действительно регистрирует работника?Моя проблема в том, что мне нужно значение @outarg, и я не уверен на 100%, как его получить.Я хотел бы переписать этот код, чтобы он соответствовал go-sql, как описано здесь https://golang.org/pkg/database/sql/#Out

Я попытался выполнить поиск и смиренно извиняюсь, если это было объяснено ранее.

edit: Я очень новичок, чтобы идти

1 Ответ

0 голосов
/ 24 октября 2018

К сожалению, драйвер MySQL, по крайней мере, go-sql-driver/mysql, не поддерживает Out параметров.Но вы все равно можете использовать переменную сеанса MySQL для получения значения параметра out.

Вам необходимо включить поддержку нескольких операторов, чтобы это работало, хотя

dsn := fmt.Sprintf(
    "%s:%s@%s/%s?charset=utf8&multiStatements=true", // <-- add this
    DB_USER, DB_PASS, DB_HOST, DB_NAME,
)

и затем

// initialize @out to ensure we're not getting a previous value
q := "SET @out=NULL"
// execute our SP
q += fmt.Sprintf(
    ";CALL regWorker('%s', '%s', '%s', '%s', '%s', @out)",
    "Thuto", "Deere4454de", "fueqx@mdj4f.com", "8725554675364", "94874256443",
)
// return the resultset containing the value of the out parameter
q += ";SELECT COALESCE(@out, 0)"

var out int
db.QueryRow(q).Scan(&out)

В этом примере я предположил, что параметр out имеет тип int.Отрегулируйте соответственно вашим требованиям.

Примечание: к сожалению, вы не сможете использовать подготовленное утверждение в этом случае;поэтому вам нужно позаботиться о надлежащей дезинфекции и экранировании значений параметров, чтобы предотвратить инъекции sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...