MySQL将变量传递给GoLang查询
在本文中,我们将介绍如何在GoLang中使用MySQL查询语句时,将变量作为查询参数。
阅读更多:MySQL 教程
1. 连接MySQL数据库
在GoLang中使用MySQL查询语句,需要先连接到MySQL数据库。可以使用官方的mysql驱动程序进行连接。具体的操作可以参考下面的示例代码:
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 设置数据库连接信息
db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/test")
if err != nil {
fmt.Println("数据库连接失败:", err)
return
}
defer db.Close()
// 测试连接是否成功
if err := db.Ping(); err != nil {
fmt.Println("数据库连接失败:", err)
return
}
fmt.Println("数据库连接成功。")
}
2. 执行MySQL查询语句
使用GoLang查询MySQL数据库,需要使用exec或query方法执行MySQL查询语句。下面分别介绍这两种方法。
2.1. 使用exec方法执行查询语句
使用exec方法执行查询语句,可以执行INSERT、UPDATE、DELETE等操作,示例代码如下:
// 插入数据
_, err := db.Exec("INSERT INTO user (name, age) VALUES (?, ?)", "Tom", 18)
if err != nil {
fmt.Println("插入数据失败:", err)
}
// 修改数据
_, err := db.Exec("UPDATE user SET age = ? WHERE name = ?", 20, "Tom")
if err != nil {
fmt.Println("修改数据失败:", err)
}
// 删除数据
_, err := db.Exec("DELETE FROM user WHERE name = ?", "Tom")
if err != nil {
fmt.Println("删除数据失败:", err)
}
2.2. 使用query方法执行查询语句
使用query方法执行查询语句,可以执行SELECT等查询操作,示例代码如下:
// 查询数据
rows, err := db.Query("SELECT * FROM user WHERE age > ?", 18)
if err != nil {
fmt.Println("查询数据失败:", err)
}
defer rows.Close()
// 遍历数据
for rows.Next() {
var id int
var name string
var age int
if err := rows.Scan(&id, &name, &age); err != nil {
fmt.Println("遍历数据失败:", err)
}
fmt.Printf("id:%d, name:%s, age:%d\n", id, name, age)
}
3. 将变量作为查询参数
使用GoLang查询MySQL数据库时,经常需要将变量作为查询参数。下面介绍如何使用占位符来将变量作为查询参数。
// 定义变量
age := 18
// 使用占位符
rows, err := db.Query("SELECT * FROM user WHERE age > ?", age)
在上面的示例代码中,使用占位符“?”将变量age作为查询参数传递给了MySQL查询语句。在实际开发中,使用占位符可以有效地防止SQL注入攻击。
4. 完整示例代码
综合以上的内容,下面是一个完整的GoLang查询MySQL数据库的示例代码:
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 设置数据库连接信息
db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/test")
if err != nil {
fmt.Println("数据库连接失败:", err)
return
}
defer db.Close()
// 测试连接是否成功
if err := db.Ping(); err != nil {
fmt.Println("数据库连接失败:", err)
return
}
fmt.Println("数据库连接成功。")
// 查询数据
age := 18
rows, err := db.Query("SELECT * FROM user WHERE age > ?", age)
if err != nil {
fmt.Println("查询数据失败:", err)
return
}
defer rows.Close()
// 遍历数据
for rows.Next() {
var id int
var name string
var age int
if err := rows.Scan(&id, &name, &age); err != nil {
fmt.Println("遍历数据失败:", err)
return
}
fmt.Printf("id:%d, name:%s, age:%d\n", id, name, age)
}
// 插入数据
res, err := db.Exec("INSERT INTO user (name, age) VALUES (?, ?)", "Tom", 18)
if err != nil {
fmt.Println("插入数据失败:", err)
return
}
id, _ := res.LastInsertId()
fmt.Println("插入数据成功,ID为:", id)
// 修改数据
res, err = db.Exec("UPDATE user SET age = ? WHERE name = ?", 20, "Tom")
if err != nil {
fmt.Println("修改数据失败:", err)
return
}
affectRows, _ := res.RowsAffected()
fmt.Println("修改数据成功,影响行数为:", affectRows)
// 删除数据
res, err = db.Exec("DELETE FROM user WHERE name = ?", "Tom")
if err != nil {
fmt.Println("删除数据失败:", err)
return
}
affectRows, _ = res.RowsAffected()
fmt.Println("删除数据成功,影响行数为:", affectRows)
}
总结
本文介绍了如何在GoLang中使用MySQL查询语句,包括连接MySQL数据库、执行MySQL查询语句以及将变量作为查询参数。以上内容是GoLang开发者进行MySQL开发的基础,通过本文的学习,相信读者已经掌握了使用GoLang查询MySQL数据库的方法和技巧。