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 ?

Comment puis-je utiliser correctement les instructions WHERE IN dans SQLite pour éviter les erreurs et les injections SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-03 09:03:39493parcourir

How Can I Correctly Use WHERE IN Statements in SQLite to Avoid Errors and SQL Injection?

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!

Déclaration:
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