请问, 在 Golang 里面如何实现以下的 SQL?

2022-04-22 15:48:41 +08:00
 suueyoung
SET SESSION block_encryption_mode = 'aes-256-ecb';

SELECT filed
FROM schema.table
WHERE encrypted_field in (
    SELECT HEX(AES_ENCRYPT('123', 'secret'))
);

只知道一步一步地执行, 但是遇上这样的, 就不知道怎么办了.

1812 次点击
所在节点    Go 编程语言
9 条回复
pluvet
2022-04-22 16:04:22 +08:00
Golang 不支持 SQL 语法
codefever
2022-04-22 16:39:40 +08:00
在用 Golang 进行开发的时候,如果需要在和数据库交互,则可以使用 database/sql 包。这是一个对关系型数据库的通用抽象,它提供了标准的、轻量的、面向行的接口。
morty0
2022-04-22 16:58:51 +08:00
Prepare 应该就可以吧
PeterYang1996
2022-04-22 17:02:01 +08:00
为什么一定要用 sql 实现呢
seakingii
2022-04-22 17:04:24 +08:00
复杂的 SQL 可以做成存储过程供 GO 调用.
MoYi123
2022-04-22 17:24:36 +08:00
放事务里,分 2 句跑.
lasuar
2022-04-22 17:27:21 +08:00
db.InTransaction( your_logic() )
lesismal
2022-04-22 23:08:03 +08:00
注意注释地方:

```golang
package main

import (
"database/sql"
"log"

_ "github.com/go-sql-driver/mysql"
)

func main() {
// 默认不支持 multi statements ,要设置 multiStatements=true ,否则无法在一个 Exec/Query 里执行多条语句
db, err := sql.Open("mysql", "root:123qwe@tcp(127.0.0.1:3306)/?charset=utf8mb4&multiStatements=true")
if err != nil {
log.Fatal(err)
}

result, err := db.Query(`
SET SESSION block_encryption_mode = 'aes-256-ecb';

SELECT filed
FROM schema.table
WHERE encrypted_field in (
SELECT HEX(AES_ENCRYPT('123', 'secret'))
);
`)
if err != nil {
log.Fatal(err)
}

defer result.Close()
for result.Next() {
var filed string
err = result.Scan(&filed)
if err != nil {
log.Fatal(err)
}
log.Println("filed:", filed)
}
}
```
suueyoung
2022-04-23 10:03:43 +08:00
太感谢了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848592

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX