문제

나는 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 클라이언트 프로그램에 직접 입력하십시오 (마지막에 세미콜론을 넣는 것을 잊지 마십시오). 같은 오류?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top