我想使用字符串作为查询的一部分。
func GetAll(id int) {
var queryPart string
if id != 0 {
queryPart = fmt.Sprintf("WHERE id = %d", id)
} else {
queryPart = ""
}
database.DB.Query("SELECT name FROM table ?, queryPart)
}
在database.DB中我有* db.Sql实例。
如何让它发挥作用?使用该代码,我仍然会收到“您的SQL语法错误”。
答案 0 :(得分:4)
您可以逐步构建查询,只在需要时添加参数。
// Build a query (columns and table being strings)
q := fmt.Sprintf("SELECT %s FROM %s", columns, table)
args := []interface{}{}
// Add conditional query/args
if id != 0 {
q = fmt.Sprintf("%s WHERE id=?",q)
args = append(args,id)
}
// Perform the query
database.DB.Query(q,args...)
如果你发现自己做了很多这样的事情,可以考虑编写一个小的查询构建器,它可以让你轻松地构建SQL查询而不用大惊小怪。它可以相对简单,有用于select,join等的插槽和用于args的数组。
答案 1 :(得分:1)
占位符(?
)仅用于变量,不用于语句。
您应该有两个单独的查询:
if id != 0 {
database.DB.Query("SELECT name FROM table WHERE id = ?", id)
} else {
database.DB.Query("SELECT name FROM table")
}
此外:使用Sprintf("WHERE id = %d", id)
会破坏占位符的目的。