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

问题描述 投票:1回答:2

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

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

go
2个回答
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
投票

占位符(?)仅用于变量,而不是语句。

您应该有两个单独的查询:

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.