Что такое «параметр запроса» в C++?
-
08-07-2019 - |
Вопрос
Мы использовали stringstream для подготовки запросов выборки на C++.Но нам настоятельно рекомендовали использовать ПАРАМЕТРЫ ЗАПРОСА для отправки sql-запросов к db2, чтобы избежать использования строкового потока.Может ли кто-нибудь рассказать, что именно означает параметр запроса в C++?Также поделитесь практическими примерами кода.
Благодарим за помощь заранее.
Редактировать:Это строковый поток, а не стрстрим.
Спасибо, Мэтью Лиджу
Решение
Я подозреваю, что это относится к параметризованным запросам в целом, вместо того, чтобы создавать запрос в строке, они предоставляют переменные (или параметры) sql, а затем передают эти переменные отдельно.Они намного лучше справляются с атаками с использованием SQL-инъекций.Проиллюстрируем примером:
"SELECT * FROM Customers WHERE CustomerId = " + _customerId;
Плохо, а это:
"SELECT * FROM Customers where CustomerId = @CustomerId"
хороший.Подвох в том, что вам нужно добавить параметры к объекту запроса (я не знаю, как это делается в C++.
Ссылки на другие вопросы:
- https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks
- Хранимые процедуры и параметризованные запросы
Дикая дикая паутина:
Другие советы
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);