Requête paramétrée pour MySQL avec C#
Lorsque vous travaillez avec des requêtes SQL, les requêtes paramétrées sont fortement recommandées. Ils protègent contre les attaques par injection SQL et améliorent les performances en éliminant le besoin de concaténer des valeurs de chaîne.
Cependant, lorsque vous utilisez des requêtes paramétrées avec MySQL à partir de C#, il est important de vous assurer que votre code est correctement configuré. Une erreur potentielle qui peut survenir est une IndexOutOfBoundsException lors de l'ajout du premier paramètre.
Le problème :
Dans le code donné :
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_@ = ?;";
Le problème réside dans la chaîne de requête, qui utilise un point d'interrogation (?) comme espace réservé pour les paramètres. MySQL ne reconnaît pas les points d'interrogation comme espaces réservés aux paramètres ; il attend des paramètres nommés préfixés par « @ ».
La solution :
Pour résoudre le problème, vous devez modifier la chaîne de requête pour utiliser les paramètres nommés et ajouter le paramètres à l'objet MySqlCommand à l'aide de la méthode AddWithValue() :
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";
public bool read(string id) { level = -1; MySqlCommand m = new MySqlCommand(readCommand); m.Parameters.AddWithValue("@param_val_1", val1); m.Parameters.AddWithValue("@param_val_2", val2); level = Convert.ToInt32(m.ExecuteScalar()); return true; }
En utilisant les paramètres nommés et le AddWithValue(), la requête sera exécutée avec succès sans rencontrer d'IndexOutOfBoundsException.
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!