Maison > développement back-end > Golang > Comment interroger correctement MySQL avec une tranche de valeurs à l'aide de SQLx ?

Comment interroger correctement MySQL avec une tranche de valeurs à l'aide de SQLx ?

Patricia Arquette
Libérer: 2024-12-04 05:06:10
original
547 Les gens l'ont consulté

How to Correctly Query MySQL with a Slice of Values Using SQLx?

SQLx interrogeant MySQL avec les valeurs d'une tranche

Lors de l'interrogation d'une table dans MySQL pour récupérer des enregistrements en fonction des valeurs contenues dans une tranche, l'utilisation de SQLx peut présenter une erreur. L'article suivant fournit une solution à ce problème.

Problème

Lors de la tentative d'interrogation d'une table à l'aide de SQLx de la manière suivante :

var qids []int
//fill qids dynamically
err = database.SQL.Select(&quotes,
    "SELECT * FROM quote WHERE qid IN ", qids)
if err != nil {
    log.Println(err)
}
Copier après la connexion

L'erreur rencontrée est :

sql: converting Exec argument #0's type: unsupported type []int, a slice
quotes []
Copier après la connexion

Solution

La solution réside dans l'utilisation de la fonction d'assistance In() fournie par SQLx. En utilisant cette fonction, la requête peut être préparée en prenant des arguments et en utilisant Rebind(). Le code corrigé serait :

var qids []int

// fills qids on query dynamically
query, args, err := sqlx.In("SELECT * FROM quote WHERE qid IN (?)", qids)
if err != nil {
    log.Fatal(err)
}

// sqlx.In returns queries with the `?` bindvar, we can rebind it for our backend
//
query = database.SQL.Rebind(query)  // database.SQL should be a *sqlx.DB

err = database.SQL.Select(&quotes, query, args...)
if err != nil {
    log.Fatal(err)
}

// or just in one line:

err = database.SQL.Select(&quotes, database.SQL.Rebind(query), args...)
Copier après la connexion

Ressource supplémentaire

Pour plus de conseils et d'exemples sur ce sujet, reportez-vous à la documentation SQLx à l'adresse : http://jmoiron.github.io/sqlx /

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