C ++ mysql c api mysql_real_escape_string
-
06-07-2019 - |
문제
나는 MySQL C API, 특히 MySQL_Real_Escape_string의 순간에 클래스 래퍼를 구축하고 있으며 제대로하고 있다고 생각하지 않습니다.
이것이 제가 기능에 대한 것입니다.
std::string Database::EscapeString(const char *pStr)
{
char *tStr = new char[strlen(pStr)*2+1];
mysql_real_escape_string(m_sqlCon, tStr, pStr, strlen(pStr));
string retStr(tStr);
delete [] tStr;
return retStr;
}
나는 이것을 통과하려고 시도했지만 예상대로 수행되지 않았으며 MySQL 오류로 끝났습니다.
해결책
나 한테보기 좋다. 데이터베이스 문제가 다른 곳에 있다고 생각합니다.
쉽게 확인하는 방법이 있습니다 : 일시적으로 교체 Database::EscapeString
더미 기능으로, 즉
std::string Database::EscapeString(const char *pStr) {return string(pStr);}
그런 다음 동일한 오류가 발생하는지 확인하십시오.
편집하다: 오류가 무엇인지 또는 쿼리가 무엇인지 정확히 알지 못하면 문제를 좁히기가 어렵습니다. 시도해 볼 몇 가지 사항은 다음과 같습니다.
a) 탈출 해야하는 모든 캐릭터를 제거하십시오. 가짜 데이터를 데이터베이스에 넣을 것이지만, 어쨌든 테스트하고 있기를 바랍니다.
std::string Database::EscapeString(const char *pStr) {
string result;
while (*pStr) {
if (strchr("\"'\r\n\t",*pStr))
{
//bad character, skip
}
else
{
result.push_back(*pStr);
}
++pStr;
}
return result;
}
b) 다른 곳에서 오류를 찾으십시오. 데이터베이스 :: 실행이 잘 작동합니까? 어쩌면 그것은 할 것입니다 snprintf
하드 코드 버퍼 크기가있는 내부적으로 (초과 할 수 있음)
c) 디버그 출력을 가져 와서 MySQL 클라이언트 프로그램에 직접 입력하십시오 (마지막에 세미콜론을 넣는 것을 잊지 마십시오). 같은 오류?
제휴하지 않습니다 StackOverflow