我正在嘗試使用“名稱”參數過濾我的寄存器。我制作了這個處理函數:func GetFuncionaries(w http.ResponseWriter, r *http.Request) { var f model.Funcionary var t util.App var d db.DB err := d.Connection() db := d.DB defer db.Close() Id, _ := strconv.Atoi(r.FormValue("Id")) Name:= r.FormValue("Name") f.Id = int64(Id) f.Name = Name funcionaries, err := f.GetFuncionaries(db) if err != nil { log.Printf("[handler/GetFuncionaries- Error: %s", err.Error()) t.ResponseWithError(w, http.StatusInternalServerError, err.Error(), "") } return } t.ResponseWithJSON(w, http.StatusOK, funcionaries, 0, 0)}以及功能模型:func (f *Funcionary) GetFuncionaries(db *sql.DB) ([]Funcionary, error) { var values []interface{} var where []string if f.Name != "" { where = append(where, "Name= ?") values = append(values, f.Name) } rows, err := db.Query(`SELECT Id, Data, Role, Name FROM funcionaries WHERE 1=1 `+strings.Join(where, " AND "), values...) if err != nil { return nil, err } funcionaries:= []Funcionary{} defer rows.Close() for rows.Next() { var funcionary Funcionary if err = rows.Scan(&funcionario.Id, &funcionario.Name, &Others...); err != nil { return nil, err } funcionaries = append(funcionaries, funcionary) } return funcionaries, nil}但是當我在郵遞員中撥打電話時,例如:http://localhost:8000/api/funcionaries?Name=a我收到錯誤:您的 SQL 語法有錯誤;檢查與您的 MySQL 服務器版本相對應的手冊,了解在“Name= ?”附近使用的正確語法 在第 3 行”,我忘記了什么?
1 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
在我看來,你的代碼生成的 SQL 字符串將是
SELECT Id, Data, Role, Name FROM funcionaries WHERE 1=1 Name= ?
而你想要的是:
SELECT Id, Data, Role, Name FROM funcionaries WHERE 1=1 AND Name= ?
為此,您可以像這樣修改代碼:
q := `SELECT Id, Data, Role, Name
FROM funcionaries
WHERE True`
if len(where) != 0 {
q = q + " AND " + strings.Join(where, " AND ")
}
rows, err := db.Query(q, values...)
- 1 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消