C ++ Mysql Real Escape String Issue

时间:2010-07-09 21:05:11

标签: c++ mysql string escaping

嗯,出于某种原因,它只在第一个用户名(和密码)上执行此操作,并为我的矢量有多大。关于为什么的任何想法?

int eMysql::strip(string &input) {
    char* from = new char[strlen(input.c_str()) * 3 + 1];
    mysql_real_escape_string(&mysql, from, input.c_str(), input.length());
    input = input.assign(from);
    delete from;
}

使用的地方:

if(query.size() > 0) {
        mysql->strip(query[0]);
        mysql->strip(query[1]);
        mysql->query("SELECT `username` FROM `users` where `username` = '"+ query[0] +"';");

1 个答案:

答案 0 :(得分:1)

我建议将查询构建为单独的字符串变量,而不是在参数中传递混乱:

static const char fixed_text[] = "SELECT `username` FROM `users` where `username` = '";
std::string query_text(fixed_text);
query_text += query[0];
query_text += "';";
mysql->query(query_text);

此技术允许您在将查询发送到MySql之前检查该查询。

我建议您检查query[0]变量是否包含\r\n等奇怪字符。 MySql手册中有一个部分列出了需要转义的字符。