2010-07-09 3 views
0

Хмм, по какой-то причине, это делает это только при первом имени пользователя (и пароле) и делает это для того, насколько велик мой мой вектор. Любые идеи о том, почему?C++ Mysql Real Escape String Issue

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

Его ввод в мой запрос Выберите 'username' FROM' users' где '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 PASSWORD \ R BOB413 \ R PASSWORD \ R "; – Fellixombc

+0

Вместо того, чтобы динамически выделять массив самостоятельно, вы можете создать 'vector ' и изменить его размер до того размера, в котором вы нуждаетесь; это может дать намного более чистый код. –

ответ

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 есть раздел, в котором перечислены символы, которые необходимо экранировать.

+0

Хорошо, сделаю, и у меня будут другие ошибки, возникающие в моей программе, поэтому я собираюсь продолжить и переписать его, а вместе с этим изучить документацию по mysql_real_escape_string – Fellixombc

Смежные вопросы