c ++ Mysql C API mysql_real_escape_string
-
06-07-2019 - |
Domanda
Sto costruendo un wrapper di classe per mysql c api, in particolare al momento per mysql_real_escape_string e non credo di farlo nel modo giusto.
questo è quello che ho per la funzione:
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;
}
Ho provato a eseguirlo ma non ha funzionato come previsto e si è concluso con errori mysql.
Soluzione
Mi sta bene. Sospetto che il tuo problema con il database sia altrove.
Esiste un modo semplice per verificare: sostituire temporaneamente Database :: EscapeString
con una funzione fittizia, ad esempio
std::string Database::EscapeString(const char *pStr) {return string(pStr);}
Quindi vedi se ricevi gli stessi errori.
Modifica : Non sapendo esattamente quale sia l'errore o quale sia la query che lo causa, è difficile restringere il problema. Ecco alcune cose da provare:
A) Basta sbarazzarsi di tutti i personaggi che dovrebbero essere evasi. Inserirà dati fasulli nel database, ma spero che tu stia testando comunque:
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) Cerca errori altrove. Database :: Execute è ben codificato? Forse esegue un snprintf
internamente con una dimensione del buffer hardcoded (che potresti superare)
C) Prova a prendere l'output di debug e immetterlo direttamente nel programma client mysql (non dimenticare di mettere un punto e virgola alla fine). Stesso errore?