gpt4 book ai didi

database - 在 Golang 中执行 SQL 查询

转载 作者:IT王子 更新时间:2023-10-29 01:52:06 26 4
gpt4 key购买 nike

我见过人们使用 Golang 内置 database/sql 查询执行查询的两种方式。其中之一是使用 fmt.Sprintf:

func (db *DB) CreateUserTable() (sql.Result, error) {
statement := "CREATE TABLE %s (%s, %s, %s, %s, %s)"
v := []interface{}{"User", "ID int PRIMARY KEY NOT NULL", "Name varchar(100) UNIQUE", "Email varchar(100) UNIQUE", "Address varchar(100) ", "Username varchar(100) UNIQUE"}
return db.Exec(fmt.Sprintf(statement, v...))
}

另一个是使用准备好的语句:

func (db *DB) CreateUserTable() (sql.Result, error) {    
statement, err := db.Prepare("INSERT INTO User(tbl1,tbl2,tbl3) VALUES(?,?,?)")
if err != nil {
log.Fatal(err)
}
return statement.Exec("value1", "value2", "value3")
}

第一个好处是允许您动态设置表名、列名和值。但是第二个仅用于值。有什么不同?我应该使用哪一个?

最佳答案

永远不要从来自系统外部的字符串构建 SQL。

enter image description here

始终使用 ? 语法。

如果您必须设置 SQL 部分(如表名),请为值准备多个包含 ? 的完整 SQL 语句。选择要执行的 SQL,可能基于用户输入,但从不根据用户输入构建 SQL。

关于database - 在 Golang 中执行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49321568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com