Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Программа для смены пароля в MySQL


Автор: Zerstroer 30.9.2009, 13:24
Здравствуйте уважаемые!
Пишу на C++ под Linux (использую стандартную библиотеку libmysqlclient) консольное приложение, которое должно менять пароль для пользователя БД MySQL.
Делаю все функцией вот так:
Код

void connectDB(string p){    //передаю пароль
  //  string que = "UPDATE user SET password = PASSWORD('"+ p + "') where user = 'MyDBUser'; FLUSH PRIVILEGES;"; //один из вариантов запроса
    string que = "SET PASSWORD FOR MyDBUser@localhost = PASSWORD('" + p +"');";
    char q2[que.size()];
    for (int i=0; i< que.size(); i++){
        q2[i] = que.at(i);
        cout << q2[i];
    }
    cout << endl;
  
    MYSQL mysql;
      if(!mysql_init(&mysql))
         cout << "can't init DB" << endl;
    if (!mysql_real_connect(&mysql, "localhost", "root", "123", "mysql", 0, NULL, 0))
         cout << "can't connect DB" << endl;
   if (!mysql_query(&mysql, q2))
         cout << "query failed" << endl;
    else
        cout << "query executed!" << endl;
    
    mysql_close(&mysql);
    mysql_library_end();
}


Вроде бы по логике вещей все правильно, но пароль для пользователя MyDBUser не меняется. Подскажите, в может быть дело?

Автор: SenkraD 30.9.2009, 13:47
По логам тоже всё ОК?

Автор: Zerstroer 30.9.2009, 13:55
По логам все чисто. 
Причем запросы, если их запускать под root пользователем базы, выполняются корректно и пароль меняют. Не могу понять, почему не получается из скомпиленой программы это сделать.

Автор: Zerstroer 30.9.2009, 14:12
Приношу свои извинения, за скоропалительно открытую и скоропостижно решенную тему!
Вопрос закрыт нашел свою ошибку.
Вместо mysql_query мне следовало использовать mysql_real_query.
Вопрос исчерпан всем (SenkraD) спасибо!

Добавлено через 1 минуту и 28 секунд
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)