C++ MySQL真逃逸字符串问题

C++ MySQL真逃逸字符串问题,c++,mysql,string,escaping,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(

嗯,出于某种原因,它只是在第一个用户名和密码上做这个,并且是根据向量的大小来做的。你知道为什么吗

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] +"';");

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

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之前检查它


我建议您检查查询[0]变量是否有任何奇怪的字符,如\r和\n。MySql手册中有一个部分列出了需要转义的字符。

它在我的查询中从username=BOB413\R PASSWORD\R BOB413\R PASSWORD\R BOB413\R PASSWORD\R BOB413\R PASSWORD\R BOB413\R PASSWORD\R BOB413\R PASSWORD\R BOB413\R BOB413\R PASSWORD\R;您可以创建一个向量,并将其调整到需要的大小,而不是自己动态分配数组;这可以产生更干净的代码。您确定可以使用new[]进行分配,然后对结果使用delete吗?@James-您也可以直接在std::string的缓冲区中执行此操作。我的意思是在另一个字符串的缓冲区上。同时测试query.size>0,然后访问query[1]是一种危险的做法。好的,可以,我的程序中还出现了一些其他错误,所以,我将继续重写它,同时,探索mysql\u real\u escape\u string上的文档