go - 在 '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 行",
我忘记了什么?
解决方案
在我看来,您的代码生成的 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...)
推荐阅读
- javascript - 为什么通过锚链接而不是 routerLink 导航时加载背景图像?
- javascript - 是什么导致该组件检测到其 props 的变化?
- node.js - 未捕获的错误:超过了 2097152 字节的 DelayedStream#maxDataSize
- android - Android单选按钮多选
- java - 使用 lambda 表达式的问题
- java - 使用 Java DB 在 Restful WebService 中执行 CRUD 操作 - Netbeans
- mysql - 为什么我的 mysql 服务器上不存在某些空间函数?
- c++ - C++ - 无法理解二叉树递归函数(插入)
- javascript - 将值添加到对象 javascript
- javascript - 在 module.exports 中使用时,导入的函数未定义