Che cos'è un "parametro query" in C ++?
-
08-07-2019 - |
Domanda
Stavamo usando stringstream per preparare query selezionate in C ++. Ma ci è stato fortemente consigliato di usare QUERY PARAMETERS per inviare query db2 sql per evitare l'uso di stringstream. Qualcuno può condividere cosa si intende esattamente per parametro di query in C ++? Inoltre, condividi alcuni snippet di codice di esempio pratici.
Apprezzo in anticipo l'aiuto.
Modifica: è stringstream e non strstream.
Grazie, Mathew Liju
Soluzione
Sospetto che questo si riferisca a query con parametri in generale, piuttosto che costruire la query in una stringa, forniscono variabili sql (o parametri) e quindi passano queste variabili separatamente. Questi sono molto meglio per la gestione degli attacchi SQL Injection. Per illustrare con un esempio:
"SELECT * FROM Customers WHERE CustomerId = " + _customerId;
È male, mentre questo:
"SELECT * FROM Customers where CustomerId = @CustomerId"
è buono. Il problema è che devi aggiungere i parametri all'oggetto query (non so come sia fatto in C ++.
Riferimenti ad altre domande:
- https://stackoverflow.com/questions / 1973 / what-is-the-best-way-to-evitare-SQL-injection attacchi
- Procedure memorizzate vs query con parametri
Wild Wild Web:
Altri suggerimenti
La query SQL nel modulo di query con parametri è sicura rispetto al formato stringa per evitare attacchi di iniezione sql. Esempio di query con parametri
StringBuilder sqlstr = new StringBuilder();
cmd.Parameters.AddWithValue("@companyid", CompanyID);
sqlstr.Append("SELECT evtconfigurationId, companyid,
configname, configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid=@companyid ");
Esempio di formato della stringa di query
StringBuilder sqlstr = new StringBuilder();
sqlstr.Append("SELECT evtconfigurationId, companyid, configname,
configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid" + CompanyID);