Вопрос

Мы использовали stringstream для подготовки запросов выборки на C++.Но нам настоятельно рекомендовали использовать ПАРАМЕТРЫ ЗАПРОСА для отправки sql-запросов к db2, чтобы избежать использования строкового потока.Может ли кто-нибудь рассказать, что именно означает параметр запроса в C++?Также поделитесь практическими примерами кода.

Благодарим за помощь заранее.

Редактировать:Это строковый поток, а не стрстрим.

Спасибо, Мэтью Лиджу

Это было полезно?

Решение

Я подозреваю, что это относится к параметризованным запросам в целом, вместо того, чтобы создавать запрос в строке, они предоставляют переменные (или параметры) sql, а затем передают эти переменные отдельно.Они намного лучше справляются с атаками с использованием SQL-инъекций.Проиллюстрируем примером:

"SELECT * FROM Customers WHERE CustomerId = " + _customerId; 

Плохо, а это:

"SELECT * FROM Customers where CustomerId = @CustomerId" 

хороший.Подвох в том, что вам нужно добавить параметры к объекту запроса (я не знаю, как это делается в C++.

Ссылки на другие вопросы:

Дикая дикая паутина:

Другие советы

Sql-запрос в форме параметризованного запроса безопаснее, чем строковый формат, чтобы избежать атаки с помощью SQL-инъекции.Пример параметризованного запроса

StringBuilder sqlstr = new StringBuilder();  
cmd.Parameters.AddWithValue("@companyid", CompanyID);  
sqlstr.Append("SELECT evtconfigurationId, companyid, 
  configname, configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid=@companyid ");

Пример формата строки запроса

StringBuilder sqlstr = new StringBuilder();   
sqlstr.Append("SELECT evtconfigurationId, companyid, configname, 
   configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid" +  CompanyID);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top