Maison >base de données >tutoriel mysql >Comment puis-je utiliser correctement les instructions WHERE IN dans SQLite pour éviter les erreurs et les injections SQL ?
Comprendre les instructions "WHERE _ IN _"
Lors de l'utilisation des instructions WHERE IN dans SQLite, il est essentiel de comprendre la syntaxe et l'utilisation correctes pour éviter les erreurs courantes.
La syntaxe Problème
L'exemple de code fourni entraîne une "ProgrammingError" car le nombre de liaisons (paramètres) fournis ne correspond pas au nombre d'espaces réservés (?) dans l'instruction. SQLite attend un paramètre de liaison (? ou un paramètre de position) pour chaque élément de la liste IN.
Solution
Pour corriger ce problème, créez suffisamment de paramètres de liaison pour correspondre la liste des variables. Ceci peut être réalisé en utilisant l'interpolation de chaîne :
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
Éviter l'injection SQL
Contrairement à l'extrait de code d'origine, cette méthode est sécurisée contre les attaques par injection SQL car les variables sont correctement liés à l'instruction SQL.
Performance Considérations
Pour les grandes listes de variables, l'utilisation d'une table temporaire peut être plus efficace. Créez une table temporaire pour contenir les valeurs, puis utilisez un JOIN sur la table temporaire plutôt qu'une clause IN avec des paramètres de liaison.
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!