Dépannage des problèmes d'instructions préparées en C# avec MySql
Vous avez rencontré une pierre d'achoppement lors de l'implémentation d'une instruction préparée dans votre programme C#. Lors de la transition vers une instruction normale, votre code fonctionne de manière transparente, vous laissant perplexe. Examinons le coupable potentiel derrière cette divergence.
Dans l'extrait de code que vous avez fourni :
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='@val1' AND admin_password=PASSWORD('@val2')", MySqlConn.conn); //cmd.Prepare(); //cmd.Parameters.AddWithValue("@val1", tboxUserName.Text); //cmd.Parameters.AddWithValue("@val2", tboxPassword.Text); cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='"+tboxUserName.Text+"' AND admin_password=PASSWORD('"+tboxPassword.Text+"')", MySqlConn.conn);
La distinction clé réside dans l'utilisation de guillemets simples (' ') dans la requête SQL. Les instructions préparées exploitent les espaces réservés de paramètres (@val1, @val2) pour empêcher les attaques par injection SQL. Lorsque vous utilisez des instructions régulières, vous devez échapper les guillemets simples dans la requête elle-même.
Pour résoudre ce problème, envisagez de modifier votre code comme suit :
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username=@val1 AND admin_password=PASSWORD(@val2)", MySqlConn.conn); cmd.Parameters.AddWithValue("@val1", tboxUserName.Text); cmd.Parameters.AddWithValue("@val2", tboxPassword.Text); cmd.Prepare();
En supprimant les guillemets simples ' de la requête et en utilisant cmd.Prepare() après avoir ajouté des paramètres, vous vous assurez que l'instruction préparée est fonctionnelle. Cette approche protège votre code contre les injections malveillantes et améliore sa sécurité.
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!