Instructions multiples avec le pilote Go MySQL
Dans Go, l'exécution de plusieurs instructions SQL dans une seule chaîne peut être difficile. Cet article examine les pilotes MySQL disponibles pour Go et étudie leur prise en charge de cette fonctionnalité.
Go-MySQL-Driver
Le pilote MySQL le plus populaire de Go est go-sql -pilote/mysql. Cependant, sa configuration par défaut ne prend pas en charge plusieurs instructions dans une seule chaîne. Cela est évident dans l'exemple de code fourni dans la question, où les deux pilotes produisent des erreurs lors de la tentative d'exécution de plusieurs instructions.
Personnalisation de la configuration
Heureusement, go-sql- driver/mysql permet la personnalisation des paramètres de connexion. En définissant le paramètre multiStatements sur true, le pilote peut être configuré pour accepter plusieurs instructions dans une seule chaîne.
package main import ( "database/sql" "log" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@(127.0.0.1:3306)/?multiStatements=true") if err != nil { log.Println(err) } sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;" _, err = db.Exec(sql) if err != nil { log.Println(err) } db.Close() }
Avec cette modification, le code exécutera désormais avec succès les deux instructions SQL sans erreur.
Pilote alternatif
Une autre option consiste à utiliser le pilote github.com/ziutek/mymysql, qui ne nécessitent une configuration spéciale pour exécuter plusieurs instructions.
package main import ( "database/sql" "log" _ "github.com/ziutek/mymysql/godrv" ) func main() { db, err := sql.Open("mymysql", "database/user/password") if err != nil { log.Println(err) } sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;" _, err = db.Exec(sql) if err != nil { log.Println(err) } db.Close() }
Bien que ce pilote prenne en charge plusieurs instructions, il est important de noter qu'il n'est peut-être pas aussi largement utilisé ou activement maintenu que d'autres options.
Remarque sur la prudence
La documentation MySQL met en garde contre l'exécution de plusieurs instructions dans une seule chaîne, car cela peut introduire des erreurs subtiles et affecter les performances. Il est généralement recommandé d’utiliser plutôt des procédures stockées ou des instructions préparées. Néanmoins, la possibilité d'exécuter plusieurs instructions dans une seule chaîne peut être bénéfique dans certains scénarios, tels que la restauration d'une base de données à partir de dumps SQL.
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!