Golang中Postgresql参数占位符的使用
Golang中Postgresql参数占位符的使用 这个查询在Go环境外能正常工作:
SELECT job_id,job_subjectFROM job
WHERE lower(concat(job_id,job_subject)) like lower('%WEB%')
我尝试在这个查询中用占位符替换“WEB”。
SELECT job_id,concat(co_name1||co_name2) as co_name,job_subject FROM job
WHERE lower(concat(job_id,job_subject)) like lower('%$?%')
在Go中我这样使用:
rows, err := db.Queryx(query, val)
但我遇到了这个错误:
pq: got 1 parameters but the statement requires 0
我哪里做错了?
更多关于Golang中Postgresql参数占位符的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
在Go中使用PostgreSQL参数占位符时,问题在于你使用了错误的占位符语法。PostgreSQL使用$1、$2这样的数字占位符,而不是$?。
以下是正确的写法:
// 正确的查询语句
query := `
SELECT job_id, concat(co_name1||co_name2) as co_name, job_subject
FROM job
WHERE lower(concat(job_id, job_subject)) like lower('%' || $1 || '%')
`
// 或者使用concat函数
query := `
SELECT job_id, concat(co_name1||co_name2) as co_name, job_subject
FROM job
WHERE lower(concat(job_id, job_subject)) like lower(concat('%', $1, '%'))
`
val := "WEB"
rows, err := db.Queryx(query, val)
如果你需要多个参数,使用$1、$2等:
query := `
SELECT job_id, job_subject
FROM job
WHERE job_id = $1 AND lower(job_subject) like lower('%' || $2 || '%')
`
rows, err := db.Queryx(query, 123, "WEB")
对于Queryx方法(来自sqlx包),用法相同:
import "github.com/jmoiron/sqlx"
// 假设db是*sqlx.DB
query := `
SELECT job_id, concat(co_name1||co_name2) as co_name, job_subject
FROM job
WHERE lower(concat(job_id, job_subject)) like lower('%' || $1 || '%')
`
val := "WEB"
rows, err := db.Queryx(query, val)
如果你使用的是database/sql的标准库:
query := `
SELECT job_id, concat(co_name1||co_name2) as co_name, job_subject
FROM job
WHERE lower(concat(job_id, job_subject)) like lower('%' || $1 || '%')
`
val := "WEB"
rows, err := db.Query(query, val)
错误pq: got 1 parameters but the statement requires 0的出现是因为PostgreSQL驱动没有在查询语句中找到任何有效的参数占位符($1、$2等),但你却传递了一个参数值。


