Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi mon instruction préparée C# avec MySQL échoue-t-elle, mais une instruction régulière fonctionne-t-elle ?

Patricia Arquette
Libérer: 2024-11-16 15:32:03
original
299 Les gens l'ont consulté

Why Does My C# Prepared Statement with MySQL Fail, But a Regular Statement Works?

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);
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal