我正在使用 Go 和 PostgreSQL(pq 驱动程序),我有以下查询
SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE %$1% ORDER BY p.rate DESC
如果我直接在PostgreSQL中执行此查询,它可以工作,但在Golang中会提示错误:
pq: syntax error at or near "%"
我该如何修复它?我试过用"\%"但没用。
谢谢。
这是完整的源代码。
func FindByName(name *string) ([]*Product, error) {
db, err := db.StablishConnection()
if err != nil {
log.Fatal(err)
panic(err)
}
defer db.Close()
query := `SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE %$1% ORDER BY p.rate DESC`
product_rows, err := db.Query(query, name)
if err != nil {
return nil, err
}
if product_rows == nil {
return nil, errors.New("No Products Named " + *name)
}
products := []*Product{}
for product_rows.Next() {
product := new(Product)
err = product_rows.Scan(&product.Id,
&product.Name,
&product.Description,
&product.Price,
&product.Image,
&product.Rate)
if err != nil {
panic(err)
}
products = append(products, product)
}
return products, nil
}
LIKE '%' || $1 || '%'
才能让占位符被识别为一个占位符吗?或者在Go中进行字符串连接并使用LIKE $1
。 - mu is too shortLIKE '%' || $1 || '%'
可以正常工作,但'%?%'
报错:pq: 提供了 1 个参数,但语句不需要参数。 - sescob27WHERE name LIKE %?%
不起作用。会导致near "%": syntax error
的错误。正确的写法是:WHERE name LIKE '%'||?||'%'
。 - 425nesp