gpt4 book ai didi

由 c++ Mysql C API mysql_real_escape_string

转载 作者:可可西里 更新时间:2023-11-01 08:38:23 24 4
gpt4 key购买 nike

我正在为 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 客户端程序中(不要忘记在末尾加上分号)。同样的错误?

关于由 c++ Mysql C API mysql_real_escape_string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1814269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com