Pergunta

Estou construindo uma classe wrapper para o mysql c api, especificamente no momento para mysql_real_escape_string e eu não acho que eu estou fazendo isso muito bem.

este é o que eu tenho para a função:

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;
}

Eu tentei executar este através mas não funcionar como esperado e terminou em erros mysql.

Foi útil?

Solução

Parece bom para mim. Eu suspeito que o seu problema de banco de dados está em outro lugar.

Não há uma maneira fácil de verificar:. Substituir temporariamente Database::EscapeString com uma função fictícia, ou seja

std::string Database::EscapeString(const char *pStr) {return string(pStr);}

Em seguida, veja se você obter os mesmos erros.

Editar : Não saber exatamente qual é o erro, ou o que a consulta fazendo com que ele seja, é difícil reduzir o problema. Aqui estão algumas coisas para tentar:

A) Apenas se livrar de todos os caracteres que precisam ser escapados. Ele vai colocar dados falsos no banco de dados, mas espero que você está apenas testando qualquer maneira:

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) procurar por erros em outros lugares. É banco de dados :: Execute codificado bem? Talvez ele faz um snprintf internamente com um tamanho de buffer codificado (que você pode ser superior a)

C) Tente tomar a sua saída de depuração e inserindo-o diretamente para o programa cliente mysql (não se esqueça de colocar um ponto e vírgula no final). Mesmo erro?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top