Maison > développement back-end > Golang > le corps du texte

Comment exécuter une requête de base de données Go avec une tranche dans la clause IN ?

Mary-Kate Olsen
Libérer: 2024-10-25 21:11:28
original
401 Les gens l'ont consulté

How to Execute a Go Database Query with a Slice in the IN Clause?

Requête de base de données Golang à l'aide de la clause Slice IN : une compréhension complète

Question :

Pourquoi la requête de base de données Golang suivante l'utilisation d'une tranche d'entiers dans la clause IN échoue :

<code class="go">inq := "6,7" //strings.Join(artIds, ",")
rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?)", inq)</code>
Copier après la connexion

Réponse :

Le problème survient car le package base de données/sql utilisé pour l'interrogation n'inspecte pas le requête et transmet les arguments directement au pilote de base de données. Cela rend difficile la gestion des requêtes avec des clauses IN contenant un nombre variable d'arguments.

Dans la requête fournie, le ? La variable bind correspond à un seul argument, alors que l’utilisation prévue est de lier plusieurs arguments en fonction de la longueur des artIds de tranche. Cependant, le pilote n'est pas en mesure de gérer cela correctement.

Pour résoudre ce problème, il est recommandé d'utiliser le package sqlx, qui offre un meilleur contrôle sur les requêtes de base de données.

Solution utilisant le package sqlx :

<code class="go">var artIds = []int{6, 7}
query, args, err := sqlx.In("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?);", artIds)</code>
Copier après la connexion

La fonction sqlx.In traite la requête et génère les variables de liaison appropriées pour la tranche d'ints, permettant à la requête d'être exécutée avec succès.

Pour plus d'informations sur ce sujet, reportez-vous à la documentation Godoc pour InQueries.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!