c ++ Mysql C API mysql_real_escape_string
-
06-07-2019 - |
题
我正在为mysql c api构建一个类包装器,特别是目前mysql_real_escape_string,我不认为我做得很对。
这就是我对该功能的所作所为:
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;
}
我尝试运行它,但它没有按预期执行并以mysql错误结束。
解决方案
对我来说很好看。我怀疑你的数据库问题在其他地方。
有一种简单的方法可以检查:暂时用虚函数替换 Database :: EscapeString
,即
std::string Database::EscapeString(const char *pStr) {return string(pStr);}
然后看看你是否得到了同样的错误。
修改的: 不确切地知道错误是什么,或者导致它的查询是什么,很难缩小问题的范围。以下是一些尝试:
A)摆脱所有需要转义的角色。它会把虚假的数据放到数据库中,但希望你只是测试一下:
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)在其他地方寻找错误。 Database :: Execute是否编码良好?也许它内部有一个 snprintf
,带有硬编码的缓冲区大小(你可能超过了)
C)尝试将调试输出直接输入mysql客户端程序(不要忘记在末尾添加分号)。同样的错误?
不隶属于 StackOverflow