猿问

在“Name= ?”附近使用的正确语法

我正在尝试使用“名称”参数过滤我的寄存器。


我制作了这个处理函数:


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 行”,


我忘记了什么?


梵蒂冈之花
浏览 146回答 1
1回答

慕的地8271018

在我看来,你的代码生成的 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...)
随时随地看视频慕课网APP

相关分类

Go
我要回答