"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-13
Parcourir:275

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

Mysql_real_escape_string() a-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 

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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3