Golang查询字符串作为查询的一部分

时间:2017-12-30 11:53:13

标签: go

我想使用字符串作为查询的一部分。

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语法错误”。

2 个答案:

答案 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)会破坏占位符的目的。