{"record":{"id":"51243cad227a1492","repo":"go-sql-driver/mysql","slug":"mysql-driver-does-not-support-the-use-of-named-pa","errorCode":null,"errorMessage":"mysql: driver does not support the use of Named Parameters","messagePattern":"mysql: driver does not support the use of Named Parameters","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"utils.go","lineNumber":785,"sourceCode":"func (ae *atomicError) Set(value error) {\n\tae.value.Store(value)\n}\n\n// Value returns the current error value\nfunc (ae *atomicError) Value() error {\n\tif v := ae.value.Load(); v != nil {\n\t\t// this will panic if the value doesn't implement the error interface\n\t\treturn v.(error)\n\t}\n\treturn nil\n}\n\nfunc namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) {\n\tdargs := make([]driver.Value, len(named))\n\tfor n, param := range named {\n\t\tif len(param.Name) > 0 {\n\t\t\t// TODO: support the use of Named Parameters #561\n\t\t\treturn nil, errors.New(\"mysql: driver does not support the use of Named Parameters\")\n\t\t}\n\t\tdargs[n] = param.Value\n\t}\n\treturn dargs, nil\n}\n\nfunc mapIsolationLevel(level driver.IsolationLevel) (string, error) {\n\tswitch sql.IsolationLevel(level) {\n\tcase sql.LevelRepeatableRead:\n\t\treturn \"REPEATABLE READ\", nil\n\tcase sql.LevelReadCommitted:\n\t\treturn \"READ COMMITTED\", nil\n\tcase sql.LevelReadUncommitted:\n\t\treturn \"READ UNCOMMITTED\", nil\n\tcase sql.LevelSerializable:\n\t\treturn \"SERIALIZABLE\", nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"mysql: unsupported isolation level: %v\", level)","sourceCodeStart":767,"sourceCodeEnd":803,"githubUrl":"https://github.com/go-sql-driver/mysql/blob/03d76c7e07908e255ce62d126d07ede3f2365d86/utils.go#L767-L803","documentation":"Returned by namedValueToValue (utils.go:785) when any driver.NamedValue passed to Exec/Query carries a non-empty Name. go-sql-driver only supports positional '?' placeholders; it does not implement named-parameter binding (tracked as issue #561). Called from QueryContext/ExecContext on both mysqlConn and mysqlStmt (connection.go:637,656,690,709).","triggerScenarios":"Calling db.QueryContext/db.ExecContext (or stmt equivalents) with arguments built via sql.Named(\"name\", value), or any []driver.NamedValue where param.Name != \"\".","commonSituations":"Porting code from a driver that supports @name/:name binds; using an ORM/query builder that emits sql.Named by default; mixing named-style calls into a MySQL codebase.","solutions":["Use positional '?' placeholders and pass args in the matching order.","If you have a name->value map, expand it to an ordered slice yourself before calling the driver.","Switch to a layer that rewrites named params to positional (some query builders do this), or pre-process the SQL.","Do not use sql.Named with this driver."],"exampleFix":"// before: named parameter -> error\nrows, err := db.Query(\"SELECT * FROM t WHERE id=:id\", sql.Named(\"id\", 7))\n\n// after: positional placeholder\nrows, err := db.Query(\"SELECT * FROM t WHERE id=?\", 7)","handlingStrategy":"validation","validationCode":"// Reject named args up front and translate maps to positional slices.\nfunc toPositional(query string, named map[string]any, order []string) (string, []any) {\n    args := make([]any, len(order))\n    for i, k := range order { args[i] = named[k] }\n    return query, args // query must already use '?' placeholders\n}","typeGuard":"func isNamedParamRejected(err error) bool {\n    return err != nil && strings.Contains(err.Error(), \"Named Parameters\")\n}","tryCatchPattern":"if isNamedParamRejected(err) {\n    // rewrite to positional '?' + ordered args, then retry.\n}","preventionTips":["Use '?' placeholders and positional args with this driver.","Never pass sql.Named(...) to db.Exec/Query/Stmt methods.","Configure query builders to emit positional placeholders for MySQL."],"tags":["query","parameters","api-misuse"],"backgroundTag":null,"analyzedSha":"03d76c7e07908e255ce62d126d07ede3f2365d86","analyzedAt":"2026-08-07T10:39:17.340Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}