#c #mysql #c 11
#c #mysql #c 11
Вопрос:
Я пытался реализовать функции в mysql c-connector из класса «Server» в моем проекте. Вот как выглядит конструктор класса: (БАЗА ДАННЫХ и СОКЕТ определены #).
Server::Server(MYSQLamp; conn)
{
mysql_init(amp;conn);
mysql_real_connect(amp;conn,"localhost","username","passwd",DATABASE,0,SOCKET,0);
if (mysql_real_connect(amp;conn,"localhost","santu","hello",DATABASE,0,SOCKET,0) == NULL) {
cout << mysql_error(amp;conn) << endl;
}
else
{
cout << "Connected." << endl;
}
}
Когда я пытаюсь вызвать класс из «main.cpp » с дескриптором соединения это вызывает ошибку.
Cannot connect twice. Already connected.
но если методы были написаны вне класса, он работает безупречно. В принципе, это работает.
#include "Server.hxx"
MYSQL san;
int main(int argc, char** argv)
{
mysql_init(amp;san);
mysql_real_connect(amp;san,"localhost","santu","hello", "test",0,"/tmp/mysql.sock",0);
cout << mysql_error(amp;san) << endl;
return 0;
}
Но этого не происходит, и происходит сбой с вышеупомянутой ошибкой.
#include "Server.hxx"
MYSQL san;
int main(int argc, char** argv)
{
Server S0(san);
return 0;
}
Ответ №1:
В определении функции вашего класса вы вызываете mysql_real_connect
дважды:
mysql_real_connect(amp;conn,"localhost","username","passwd",DATABASE,0,SOCKET,0);
if (mysql_real_connect(amp;conn,"localhost","santu","hello",DATABASE,0,SOCKET,0) == NULL) {
Просто удалите первую строку, и все будет работать нормально.
Комментарии:
1. Но почему он не может игнорировать второе соединение? ранее я не мог выполнить mysql_close (amp;san). это дало мне ошибку шины. Не могли бы вы, пожалуйста, объяснить это?
2. @Vasanth трудно сказать, не глядя на внутренности кода MySQL API, но я думаю, что это просто не так, как разработан интерфейс.