c ++ MySQL C mysql_escape_string API
-
06-07-2019 - |
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.
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?