Mysql_real_escape_string() présente-t-il des défauts irréparables ?
Certains sceptiques affirment que la fonction mysql_real_escape_string() est fondamentalement défectueuse et ne peut pas protéger de manière fiable les requêtes SQL. . Ils citent des articles obsolètes comme preuve.
Peut-il être utilisé pour des déclarations préparées personnalisées ?
Malgré ces problèmes, il est toujours possible d'exploiter mysql_real_escape_string() pour créer déclarations préparées sur mesure. Cependant, cela nécessite une attention particulière à la gestion du jeu de caractères.
Solution :
Selon la documentation de l'API MySQL C pour mysql_real_escape_string(), vous devez utiliser mysql_set_character_set() pour définir le jeu de caractères. Cela garantit que cela affecte également le jeu de caractères utilisé par mysql_real_escape_string().
Exemple de code :
#include <mysql.h> int main() { MYSQL *conn = mysql_init(NULL); mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0); // Change the encoding using mysql_set_charset() mysql_set_charset(conn, "utf8"); // Create a custom prepared statement using mysql_real_escape_string() char query[1024]; mysql_real_escape_string(conn, query, "SELECT * FROM users WHERE username='test'", sizeof(query)); // Execute the query mysql_query(conn, query); mysql_close(conn); return 0; }
En suivant cette approche et en évitant SET NAMES/SET CHARACTER SET , vous pouvez utiliser efficacement mysql_real_escape_string() pour protéger vos requêtes SQL contre les injections.
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!