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

Était-ce utile?

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:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top