作为查询的一部分的Golang查询字符串
我想使用字符串作为查询的一部分作为查询的一部分的Golang查询字符串,go,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实例 如何
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语法有错误”。占位符(?
)仅用于变量,而不是语句
您应该有两个单独的查询:
if id != 0 {
database.DB.Query("SELECT name FROM table WHERE id = ?", id)
} else {
database.DB.Query("SELECT name FROM table")
}
另外:使用Sprintf(“其中id=%d”,id)
会破坏占位符的用途。占位符(?
)仅用于变量,而不是语句
您应该有两个单独的查询:
if id != 0 {
database.DB.Query("SELECT name FROM table WHERE id = ?", id)
} else {
database.DB.Query("SELECT name FROM table")
}
另外:使用
Sprintf(“其中id=%d”,id)
会破坏占位符的作用。您可以逐步构建查询,仅在需要时添加参数
// 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查询而不必太大惊小怪。它可以相对简单,有用于选择、连接等的插槽和用于参数的数组。
您可以逐步构建查询,只在需要时添加参数// 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查询而不必太大惊小怪。它可以相对简单,有用于选择、连接等的插槽和用于args的数组。
这是唯一的方法吗?我有一个非常复杂的查询,我不想重复代码。@nexeq您可以将查询字符串与+
连接起来,并使用append
将参数收集到一个片段中,然后,在结束时,像这样执行查询:查询(queryString,args…
。这是唯一的方法吗?我有一个非常复杂的查询,我不想重复代码。@nexeq您可以将查询字符串与+
连接起来,并使用append
将参数收集到一个片段中,然后,在结束时,像这样执行查询:查询(queryString,args…
@mkopriva感谢您的编辑,我在同一时间编辑,我想它发生了冲突。我看到了,不用担心;)很好,如果你有一些简单查询生成器的例子,我真的很想看看:)我写的/使用的在这里,它可能适合你,也可能不适合你,或者提供一个有用的ref@mkopriva谢谢你的编辑,我在同一时间编辑,我想它发生了冲突。我看到了,不用担心;)很好,如果您有一些简单查询生成器的示例,我真的很想看看:)我编写/使用的示例就在这里,它可能适合您,也可能不适合您,或者提供了有用的参考