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.
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) }
L'erreur rencontrée est :
sql: converting Exec argument #0's type: unsupported type []int, a slice quotes []
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...)
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!