c ++ Mysql C API mysql_real_escape_string
-
06-07-2019 - |
Pregunta
Estoy creando un contenedor de clase para la API de mysql c, específicamente en este momento para mysql_real_escape_string y no creo que lo esté haciendo bien.
esto es lo que tengo para la función:
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;
}
Intenté ejecutar esto, pero no funcionó como se esperaba y terminó en errores mysql.
Solución
Se ve bien para mí. Sospecho que el problema de su base de datos está en otra parte.
Hay una manera fácil de verificar: reemplazar temporalmente Database :: EscapeString
con una función ficticia, es decir,
std::string Database::EscapeString(const char *pStr) {return string(pStr);}
Luego vea si obtiene los mismos errores.
Editar : Sin saber exactamente cuál es el error, o cuál es la consulta que lo causa, es difícil reducir el problema. Aquí hay algunas cosas para probar:
A) Simplemente deshazte de todos los personajes que tendrían que escapar. Pondrá datos falsos en la base de datos, pero espero que de todas formas solo esté probando:
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) Busque errores en otra parte. ¿Database :: Execute está bien codificado? Tal vez hace un snprintf
internamente con un tamaño de búfer codificado (que puede estar excediendo)
C) Intente tomar su salida de depuración e ingresarla directamente en el programa cliente mysql (no olvide poner un punto y coma al final). ¿El mismo error?