gpt4 book ai didi

mysql - 在 golang 中显示来自数据库的结果

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

我正在读取来自表单的 MySQL 查询输入:

<h1>MySQL Page</h1>
<small>Perform queries and edit the database from here</small>
<form method="get" action="">
<label for="sqlQuery">MySQL Query:</label>
<input type="text" id="sqlQuery" name="sqlQuery">
<button type="submit">Perform Query</button>
</form>

之后我想使用 GoLang 在同一页面上显示结果,但它一直告诉我:

# command-line-arguments
./sql.go:128: cannot convert results (type sql.Result) to type string

请记住,这是我编写的第一个 golang 应用程序,如果这是一个简单的问题,我深表歉意,这是 golang 代码:

func sqlQueryHandler(response http.ResponseWriter, request *http.Request){
userName := getUserName(request)
db, err := sql.Open("mysql", userName)
fmt.Fprintf(response, sqlPage)
sqlCommand := request.FormValue("sqlQuery")
//fmt.Fprintf(response, sqlCommand)
if err != nil {
fmt.Fprintf(response, "\n\nAn error occured during your MySQL command: %s", err)
panic(err)
} else {
data, err := db.Exec(sqlCommand)
if err != nil {
http.Redirect(response, request, "/error", 302)
} else {
// display the output of the sql query here
}
}
}

最佳答案

这是一个基于您的代码的示例:

func sqlQueryHandler(response http.ResponseWriter, request *http.Request) {
var (
userName = getUserName(request)
sqlCommand = request.FormValue("sqlQuery")
)

db, err := sql.Open("mysql", userName)
if err != nil {
fmt.Fprintf(response, "\n\nAn error occured during your MySQL command: %s", err)
// if you panic you stop here anyway. no else needed
panic(err)
}
rows, err := db.Query(sqlCommand)
if err != nil {
http.Redirect(response, request, "/error", 302)
// return, so no else is needed
return
}

if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var (
name string
age int
)
if err := rows.Scan(&name, &age); err != nil {
panic(err)
}
fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
panic(err)
}
}

但是这种方法有几个问题:

  • 您正在从服务器外部传递 sql。访问它的任何人都可以从您的服务器读取所有数据。
  • Go 的优势之一是它是一种类型化语言。您在这里构建了一个通用的 sql 查询函数,它与 typed language 范例相矛盾。您可以编写处理不同结构数据的通用函数(如 json.Unmarshal())——但尤其是在编程早期,您不应该这样做。

关于mysql - 在 golang 中显示来自数据库的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45740042/

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