Qu'est-ce qu'un paramètre de requête & # 8220; & # 8221; en C ++?
-
08-07-2019 - |
Question
Nous utilisions stringstream pour préparer des requêtes de sélection en C ++. Mais il nous a été fortement conseillé d’utiliser QUERY PARAMETERS pour soumettre des requêtes db2 sql afin d’éviter l’utilisation de stringstream. Quelqu'un peut-il partager le sens exact d'un paramètre de requête en C ++? Partagez également des exemples de fragments de code pratiques.
Appréciez l'aide à l'avance.
Éditer: c'est stringstream et non strstream.
Merci, Mathew Liju
La solution
Je soupçonne que cela fait référence aux requêtes paramétrées en général, plutôt que de construire la requête dans une chaîne, ils fournissent des variables SQL (ou paramètres), puis transmettent ces variables séparément. Celles-ci sont bien meilleures pour gérer les attaques par injection SQL. Pour illustrer avec un exemple:
"SELECT * FROM Customers WHERE CustomerId = " + _customerId;
Est mauvais, alors que ceci:
"SELECT * FROM Customers where CustomerId = @CustomerId"
c'est bien. Le problème, c’est que vous devez ajouter les paramètres à l’objet de requête (je ne sais pas comment cela se fait en C ++.
Références à d'autres questions:
- https://stackoverflow.com/questions / 1973 / quel-est-le-meilleur-moyen-d'éviter-les attaques par injection de type
- Procédures stockées et requêtes paramétrées
Web sauvage sauvage:
Autres conseils
La requête SQL sous forme de requête paramétrée est sûre que le format de chaîne pour éviter les attaques par injection SQL. Exemple de requête paramétrée
StringBuilder sqlstr = new StringBuilder();
cmd.Parameters.AddWithValue("@companyid", CompanyID);
sqlstr.Append("SELECT evtconfigurationId, companyid,
configname, configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid=@companyid ");
Exemple de format de chaîne de requête
StringBuilder sqlstr = new StringBuilder();
sqlstr.Append("SELECT evtconfigurationId, companyid, configname,
configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid" + CompanyID);