Créer efficacement des requêtes SQL dans Go
Concaténer des chaînes avec des valeurs dans des requêtes SQL texte peut être un peu délicat dans Go. Contrairement à Python, la syntaxe de formatage des chaînes de Go se comporte différemment, entraînant des erreurs courantes comme celle rencontrée ici.
Erreur de syntaxe du tuple
L'extrait de code initial tente d'utiliser un Python -tuple de style, qui n'est pas pris en charge dans Go. Cela entraîne une erreur de syntaxe :
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, (val1, val2))</code>
Types incompatibles
La tentative de conversion des éléments du tuple en chaînes échoue également en raison d'une incompatibilité de type :
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, val1, val2)</code>
Éviter les différences d'opérateur
Convertir les paramètres sous forme de chaînes et les concaténer avec l'opérateur %s fonctionnerait mais n'est pas recommandé. Cette approche introduit un risque de non-concordance des opérateurs :
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %s AND column2_name = %s`, strconv.Itoa(val1), val2)</code>
La solution Go
Pour écrire correctement une requête SQL texte avec concaténation de valeurs dans Go, utilisez fmt.Sprintf comme suit :
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %s`, val1, val2)</code>
Cette syntaxe évite les vulnérabilités d'injection et garantit une conversion de type appropriée.
Prévention des injections
Pour empêcher les attaques par injection SQL, toujours utilisez des instructions préparées ou fournissez des caractères d'échappement pour les entrées fournies par l'utilisateur.
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!