TypeError : tous les arguments ne sont pas convertis lors du formatage de la chaîne dans les requêtes SQL paramétrées
Rencontre avec l'erreur "TypeError : tous les arguments ne sont pas convertis lors du formatage de la chaîne "Lors de l'utilisation de chaînes dans une requête SQL paramétrée, c'est un problème courant.
L'exemple de code fourni :
cur.execute("SELECT * FROM records WHERE email LIKE '%s'", search)
tente d'exécuter une requête avec une chaîne formatée avec un espace réservé (%s) pour le paramètre de recherche. Cependant, cette méthode est incorrecte.
Pour résoudre cette erreur, la bonne façon d'exécuter une requête paramétrée est de fournir les valeurs d'espace réservé sous forme de liste :
cur.execute("SELECT * FROM records WHERE email LIKE %s", [search])
Dans ce cas, [ search] est une liste contenant le seul paramètre de recherche. MySQLdb (et d'autres bibliothèques de bases de données similaires) s'attendent à ce qu'une liste de valeurs soit convertie et formatée. La transmission directe d'une seule valeur entraînera l'erreur.
La raison derrière cela est qu'une requête paramétrée peut contenir plusieurs espaces réservés dans l'instruction SQL, chacun représentant une valeur différente. En fournissant les valeurs sous forme de liste, la bibliothèque de base de données peut parcourir la liste et convertir chaque valeur de manière appropriée.
Par conséquent, lors de l'utilisation d'espaces réservés dans des requêtes SQL paramétrées, il est essentiel de fournir les valeurs sous forme de liste ou de tuple. . Cela garantit que tous les arguments sont correctement convertis et formatés, évitant ainsi l'erreur « Tous les arguments ne sont pas convertis ».
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!