Maison  >  Article  >  développement back-end  >  Comment exécuter une requête de base de données Go avec une tranche dans la clause IN ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 21:11:28393parcourir

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>

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>

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!

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