热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何将数组设置为SQL查询的参数

比方说,某些前端应用程序将具有这种主体的POST请求发送到后端(Go)应用程序:

比方说,某些前端应用程序将具有这种主体的POST请求发送到后端(Go)应用程序:

{
"city": "London","gender": ["Female","Male"],"has_family": [0,1]
}

如您所见,请求正文具有两个数组。我试图将这些数组设置为SQL查询。就我而言,我对ClickHouse数据库进行SQL查询。我将go-clickhouse包用于此任务。

我尝试了这样的代码,但是会引发错误:


  

sql:转换参数$ 2类型:不受支持的类型[] string,一个分片
  字符串

此外,我尝试将数据类型从[]string更改为[]interface{}。不幸的是,在这种情况下,它会引发如下错误:


  

sql:转换参数$ 2类型:不受支持的类型[] interface {},a
  接口切片

代码

var COntroller= func(responseWriter http.ResponseWriter,request *http.Request) {
type RequestBody struct {
City string `json:"city"`
Gender []string `json:"gender"`
HasFamily []int `json:"has_family"`
}
requestBody := RequestBody{}
decoder := json.NewDecoder(request.Body)
if err := decoder.Decode(&requestBody); err != nil {
fmt.Println(err)
return
}
rows,err := database.ClickHouse.Query("SELECT * FROM TABLE_NAME WHERE lower(CITY) = lower($1) AND GENDER IN ($2) AND HAS_FAMILY IN ($3);",requestBody.City,requestBody.Gender,requestBody.HasFamily)
if err != nil {
fmt.Println(err)
return
}
// other code
}


尝试用requestBody.Gender包装requestBody.HasFamilyclickhouse.Array()。并尝试将$n更改为?

代码:

rows,err := database.ClickHouse.Query(
"SELECT * FROM TABLE_NAME WHERE lower(CITY) = lower(?) AND GENDER IN (?) AND HAS_FAMILY IN (?);",requestBody.City,clickhouse.Array(requestBody.Gender),clickhouse.Array(requestBody.HasFamily),)

更多信息:https://godoc.org/github.com/mailru/go-clickhouse#Array


推荐阅读
author-avatar
ayuanliang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有