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.

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top