выглядит хорошо для меня. Я подозреваю, что проблема с вашей базой данных в другом месте.
Существует простой способ проверить: временно заменить Database::EscapeString
на фиктивную функцию, т.е.
std::string Database::EscapeString(const char *pStr) {return string(pStr);}
Тогда посмотрите, если вы получите те же ошибки.
Редактировать :
Не зная точно, что это за ошибка или каков ее вызывающий запрос, трудно сузить проблему. Вот несколько вещей, которые можно попробовать:
А) Просто избавьтесь от всех персонажей, которые должны были быть убегали. Он поместит фиктивные данные в базу данных, но, надеюсь, вы все равно тестируете:
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) Ищите ошибки в другом месте. Хорошо ли закодирована база данных :: Выполнить? Может быть, он snprintf
внутренне с жестко закодированным размером буфера (который вы можете превышать)
C) Попробуйте взять отладочный вывод и ввести его прямо в клиентскую программу mysql (не забудьте поставить точку с запятой в конце). Та же ошибка?