C ++의 "쿼리 매개 변수"란 무엇입니까?
-
08-07-2019 - |
문제
C ++에서 선택 쿼리를 준비하기 위해 StringStream을 사용했습니다. 그러나 쿼리 매개 변수를 사용하여 DB2 SQL 쿼리를 제출하여 StringStream 사용을 피하는 것이 좋습니다. 누구든지 C ++의 쿼리 매개 변수의 의미를 공유 할 수 있습니까? 또한 실용적인 샘플 코드 스 니펫을 공유하십시오.
미리 도움을 주셔서 감사합니다.
편집 : 그것은 stringstream이며 strstream이 아닙니다.
감사합니다, Mathew Liju
해결책
나는 이것이 문자열로 쿼리를 구성하는 대신 일반적으로 매개 변수화 된 쿼리를 말하고 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-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);
제휴하지 않습니다 StackOverflow