Maison  >  Article  >  développement back-end  >  mysql_real_escape_string() peut-il être utilisé en toute sécurité avec des instructions préparées personnalisées ?

mysql_real_escape_string() peut-il être utilisé en toute sécurité avec des instructions préparées personnalisées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 06:04:02821parcourir

Can mysql_real_escape_string() Be Used Safely with Custom Prepared Statements?

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!

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