Maison >développement back-end >Tutoriel Python >Lors de l'utilisation de SQLite3 en Python, pourquoi « Nombre incorrect de liaisons fournies » lors de l'utilisation de la substitution de paramètres « ? » ?
Dans une tentative de protection contre les injections SQL, un développeur a rencontré une erreur lors de l'utilisation de SQLite3 avec Python 2.5. Lorsque vous utilisez le « ? » recommandé. substitution de paramètres pour empêcher les injections, ils ont été confrontés au dilemme suivant :
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
Ce problème semblait provenir de la création initiale de la base de données, qui contenait huit liaisons. Cependant, l'utilisation de la substitution "%s" moins sécurisée pour chaque nom d'élément a résolu le problème.
for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item) self.cursor.close()
La solution à cette perplexité réside dans la compréhension que la méthode Cursor.execute() nécessite une séquence comme seconde paramètre. Dans ce cas, le développeur fournissait une chaîne comportant huit caractères. Pour remédier à cela, la modification de code suivante doit être implémentée :
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])
En vous conformant à cette spécification de paramètre, le problème peut être résolu efficacement, permettant une récupération sécurisée et efficace des données à partir de SQLite3.
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!