Golang Go语言中问一个 postgresql 传参问题

Golang Go语言中问一个 postgresql 传参问题

postgresql 使用的库是 github.com/lib/pq 现有如下 sql 语句:

`SELECT id FROM redirect WHERE list && array[1001] LIMIT 1

其中 1001 是想作为条件传进来的,如下这样写报语法错误

query := `SELECT id FROM redirect WHERE list && array[$1] LIMIT 1`
var id sql.NullInt64
err := postgres.QueryRow(query, 1001).Scan(&id)
log.Println("err", err)   // err pq: operator does not exist: integer[] && text[]
log.Println(id.Int64) 

更多关于Golang Go语言中问一个 postgresql 传参问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

10 回复

你那个 sql 语句应该不是个正常的 sql 语句吧

SELECT id FROM “redirect” WHERE ‘list’ IN (1000) LIMIT 1 OFFSET 0

更多关于Golang Go语言中问一个 postgresql 传参问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


上面那个 list 不需要 ’ 号包裹
靠,v2ex 的回复不能编辑吗?怕了怕了,以后不敢随便在 V2EX 回复东西

不对。 往了说了 list 数据类型为 int array

忘了附上表结构了,我 append 了表结构

在这里 https://www.postgresqltutorial.com/postgresql-array/ 看到一个示例

SELECT name, phones FROM contacts WHERE ‘(408)-589-5555’ = ANY (phones);

不能这样吧,用 xxx = any($1)试下

https://www.postgresql.org/docs/9.2/arrays.html 在官方文档里也可以看到很多示例的

谢谢 我去看看

我上面的 sql 执行没问题呀

在Golang中使用PostgreSQL进行数据库操作时,传参是一个常见的需求,通常通过SQL查询中的参数占位符来实现。以下是一些关键点,帮助你更好地理解和实现这一功能:

  1. 使用数据库驱动: Golang中操作PostgreSQL,常用lib/pq驱动。确保你已通过go get安装了该驱动。

  2. 参数占位符: PostgreSQL中,SQL语句的参数占位符使用$1, $2, $3等。例如,SELECT * FROM users WHERE id = $1 AND name = $2

  3. 执行查询: 使用驱动提供的QueryExec等方法执行SQL语句时,传入参数。例如:

    db, err := sql.Open("postgres", "user=username dbname=mydb sslmode=disable")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
    
    var id int = 1
    var name string = "John Doe"
    
    rows, err := db.Query("SELECT * FROM users WHERE id = $1 AND name = $2", id, name)
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    
    for rows.Next() {
        // 处理结果
    }
    
  4. 注意事项

    • 确保SQL语句中的占位符与传入的参数数量、顺序一致。
    • 处理好错误,避免SQL注入等安全问题。
    • 使用连接池等优化数据库操作性能。

通过上述方法,你可以在Golang中高效、安全地向PostgreSQL传递参数。

回到顶部