SET SESSION block_encryption_mode = 'aes-256-ecb';
SELECT filed
FROM schema.table
WHERE encrypted_field in (
SELECT HEX(AES_ENCRYPT('123', 'secret'))
);
只知道一步一步地执行, 但是遇上这样的, 就不知道怎么办了.
1
pluvet 2022-04-22 16:04:22 +08:00
Golang 不支持 SQL 语法
|
2
codefever 2022-04-22 16:39:40 +08:00
在用 Golang 进行开发的时候,如果需要在和数据库交互,则可以使用 database/sql 包。这是一个对关系型数据库的通用抽象,它提供了标准的、轻量的、面向行的接口。
|
3
morty0 2022-04-22 16:58:51 +08:00
Prepare 应该就可以吧
|
4
PeterYang1996 2022-04-22 17:02:01 +08:00
为什么一定要用 sql 实现呢
|
5
seakingii 2022-04-22 17:04:24 +08:00
复杂的 SQL 可以做成存储过程供 GO 调用.
|
6
MoYi123 2022-04-22 17:24:36 +08:00
放事务里,分 2 句跑.
|
7
lasuar 2022-04-22 17:27:21 +08:00
db.InTransaction( your_logic() )
|
8
lesismal 2022-04-22 23:08:03 +08:00 1
注意注释地方:
```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) } } ``` |
9
suueyoung OP 太感谢了!
|