Maison >développement back-end >Golang >requête mysql golang

requête mysql golang

WBOY
WBOYoriginal
2023-05-19 13:27:09719parcourir

Golang est un langage de programmation de plus en plus populaire qui excelle dans la gestion de grandes quantités de données et dans des performances de simultanéité élevées. Dans le même temps, MySQL, en tant que système de base de données relationnelle populaire, est très compatible avec Golang. Dans cet article, nous explorerons comment exécuter des requêtes MySQL dans Golang.

  1. Installer le pilote MySQL

Avant d'utiliser Golang pour interroger MySQL, vous devez d'abord installer le pilote MySQL. Le pilote MySQL le plus couramment utilisé dans Golang est "mysql", qui peut être installé via la commande suivante :

go get -u github.com/go-sql-driver/mysql

Cette commande installera le pilote mysql dans l'environnement Golang.

  1. Connectez-vous à la base de données MySQL

Avant d'effectuer une requête MySQL, vous devez d'abord établir une connexion avec la base de données. Vous pouvez utiliser le code suivant pour établir une connexion à la base de données MySQL :

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

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()
}

Dans le code ci-dessus, nous utilisons la fonction "sql.Open" pour ouvrir la base de données MySQL depuis Golang, avec les paramètres suivants :

  • Premier paramètre : Spécifiez la base de données utilisée Driver, voici "mysql"
  • Deuxième paramètre : Spécifiez les informations de connexion de la base de données MySQL, au format "username:password@tcp(host:port)/database_name"

    • username : Le nom d'utilisateur de la base de données MySQL
    • password : Le mot de passe de la base de données MySQL
    • host:port : L'hôte et le numéro de port de la base de données MySQL
    • database_name : Le nom de la base de données MySQL

Après avoir exécuté le requête, vous devez également transmettre l'instruction "db.Close()" pour fermer la connexion.

  1. Exécuter la requête SELECT

Après avoir établi la connexion, vous pouvez utiliser Golang pour exécuter la requête MySQL. Ce qui suit est un exemple de code simple pour exécuter l'instruction de requête SELECT :

rows, err := db.Query("SELECT name, age FROM users WHERE age > ?", 20)
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var name string
    var age int
    err = rows.Scan(&name, &age)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(name, age)
}
  • La fonction "db.Query" accepte l'instruction de requête SQL et ses paramètres, et renvoie l'ensemble de résultats
  • "rows.Next" parcourt chaque ligne de données, la fonction "rows .Scan" analyse chaque ligne de données dans une variable
  • Après avoir terminé la requête, vous devez appeler la fonction "rows.Close" pour fermer l'itérateur du jeu de résultats
  1. Effectuer INSERT, Opérations UPDATE, DELETE

Dans Golang, l'exécution d'opérations telles que INSERT, UPDATE et DELETE est fondamentalement la même que l'exécution d'opérations SELECT. Voici l'exemple de code :

result, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "John", 25)
if err != nil {
    panic(err.Error())
}
lastInsertId, _ := result.LastInsertId()
rowsAffected, _ := result.RowsAffected()
fmt.Printf("LastInsertId: %d, RowsAffected: %d
", lastInsertId, rowsAffected)
  • La fonction "db.Exec" transmet l'instruction d'opération SQL et ses paramètres à la base de données MySQL
  • La fonction "result.LastInsertId()" renvoie l'ID de clé primaire des données insérées
  • "result.RowsAffected() "La fonction renvoie le nombre de lignes affectées
  1. À l'aide d'instructions préparées

Dans Golang, vous pouvez utiliser des instructions préparées pour exécuter des requêtes MySQL. Les instructions préparées peuvent améliorer les performances des requêtes car le serveur MySQL peut mettre en cache les mêmes instructions de requête lors de l'exécution de plusieurs instructions de requête identiques, réduisant ainsi la surcharge de compilation des instructions SQL. Voici un exemple d'utilisation d'instructions préparées :

stmt, err := db.Prepare("SELECT name, age FROM users WHERE age > ?")
if err != nil {
    panic(err.Error())
}
defer stmt.Close()

rows, err := stmt.Query(20)
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var name string
    var age int
    err = rows.Scan(&name, &age)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(name, age)
}
  • La fonction "db.Prepare" compile l'instruction de requête en un objet d'instruction préparée
  • Dans l'objet préparé, "?" est utilisé pour représenter les espaces réservés aux paramètres
  • Similaire à "db.Query", la fonction "stmt.Query" peut être utilisée pour effectuer des requêtes prétraitées
  1. Considérations de sécurité

La sécurité est très importante lors de l'exécution de requêtes MySQL. Golang fournit quelques bonnes pratiques pour l'utilisation des requêtes MySQL, notamment :

  • N'utilisez pas la concaténation de chaînes pour créer des instructions SQL. Vous devez utiliser des instructions préparées et des espaces réservés pour les paramètres.
  • Ne construisez pas dynamiquement à partir des instructions de requête entrées par l'utilisateur, car cela pourrait exposer les requêtes. base de données
  • Les données d'entrée doivent être échappées ou paramétrées pour empêcher les attaques par injection SQL

Les meilleures pratiques ci-dessus peuvent réduire le risque d'attaques telles que l'injection SQL.

Conclusion

Dans cet article, nous avons exploré comment exécuter des requêtes MySQL dans Golang. Après avoir compris les méthodes de connexion et la syntaxe de base, vous pouvez utiliser Golang pour interroger la base de données MySQL et utiliser les meilleures pratiques pour garantir la sécurité de la requête. Lorsque vous utilisez Golang pour les requêtes MySQL, gardez toujours à l'esprit les problèmes de sécurité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:déploiement grpc golangArticle suivant:déploiement grpc golang