Utilisation de caractères génériques SQL et d'opérateurs LIKE dans les formats de chaîne Python
L'insertion de caractères génériques SQL et d'opérateurs LIKE dans les formats de chaîne Python peut être difficile. Cet article propose une solution aux erreurs courantes rencontrées lors de la tentative d'exécution de requêtes MySQL à l'aide de MySQLdb.
Erreur de MySQLdb
Les tentatives 3 et 4 ont renvoyé des erreurs de MySQLdb, indiquant " pas assez d'arguments pour formater la chaîne." Cela se produit car le signe % est interprété comme un spécificateur de format par l'opérateur de formatage de chaîne en Python.
Vulnérabilité à l'injection SQL
Les quatre premières tentatives affichées sont vulnérables à Attaques par injection SQL. Les entrées de l'utilisateur, telles que la variable de requête, doivent être nettoyées ou échappées pour empêcher l'exécution de SQL malveillant.
Approche correcte
L'approche recommandée consiste à utiliser un espace réservé au lieu du formatage de chaîne. Voici un exemple :
curs.execute("""SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE %s""", ('%' + query + '%',))
Deux arguments sont passés à exécuter() :
Cette approche garantit que l'instruction SQL est valide et protégée de SQL injection.
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!