Lorsque vous essayez d'utiliser une liste d'ID dans une clause IN dans une requête MySQL, il est essentiel de assurer la sécurité de l'opération, en évitant les vulnérabilités potentielles d'injection SQL. Contrairement au mappage de la liste sur une chaîne et à son utilisation directe dans la requête, ce qui la rend vulnérable, une approche plus sûre consiste à utiliser la liste directement comme paramètre.
Pour y parvenir, on peut utiliser une chaîne de format pour générer le nombre approprié d'espaces réservés (%s) en fonction de la longueur de la liste. La liste elle-même est ensuite transmise sous forme de tuple à la fonctionexecute(), évitant ainsi le besoin de citations et d'échappements manuels.
format_strings = ','.join(['%s'] * len(list_of_ids)) cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings, tuple(list_of_ids))
En envoyant les données (list_of_ids) en tant que paramètre, elles sont gérées par Pilote MySQL directement, éliminant le risque d'injection. Cette méthode permet de conserver tous les caractères de la chaîne, sans avoir besoin d'une désinfection ou de guillemets supplémentaires.
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!