Łączenie do MySQL

0

używam polecenia

mysql_real_connect(conn, server_name.c_str(), login.c_str(), password.c_str(), dbname.c_str(),3306,NULL, 0)

Lecz nie łączy się ono z bazą. Prawdopodobnie chodzi o to ze nie zalinkowałem czegoś. Korzystam z plików nagłówkowych z mojego domowego serwera xampp. A do projektu w visual studio 2010 dodałem link do libmysql.lib program się kompiluje aczkowiek nie nawiązuje połączenia. Próbowałem też:

if(mysql_real_connect(conn, server_name.c_str(), login.c_str(), password.c_str(), dbname.c_str(),3306,NULL, 0) == NULL)
{
        printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
}

Ale wg programu jest wszystko ok.

0

Weź standardowego klienta MySQL i sprawdź czy łączysz się z bazą przy tych parametrach z tego komputera na którym program robisz/testujesz.
Dopóki nie upewnisz się że klient MySQL daje rady się połączyć to nie ma nawet najmniejszego sensu kombinować.
Podaj też jaki ci wypisuje numer błędu i jego tekst.

0

Ahhh Rozumiem na czym polegał mój błąd, łącze sie w oddzielnej metodzie i tam wszystko jest jak być powinno, ale po zakończeniu metody połączenie się zamyka. Głupi błąd... temat do zamknięcia.

0

Przepraszam za double, ale chce odświeżyć temat.

Czasem mam błąd:
This handle is already connected. Use a separate handle for each connectiom.

Mimo, że zawsze używam: mysql_close() to jednak nie kończy mi połączenia. Ktoś może wie jak je zakończyć?

0

Kończy bez wątpienia, tylko że nie możesz w ramach nie zakończonego zapytania MySQL dać kolejne zapytanie.

0

Aaaa teraz rozumiem. A jest jakiś sposób by utworzyć połączenie raz i je utrzymywać ciągle podczas działania programu? Czy zawsze będę musiał kończyć i zaczynać na nowo połączenie?

0

Przeważnie programy właśnie tak robią.
Ważne aby dawać jakieś polecenie bazie co jakiś czas bo inaczej sama się rozłącza.
Możesz dawać np: "select now()" raz na minutę.

0

A jest jakiś sposób by sprawdzać czy jest się połączonym? Albo czy ciągłe łączenie się i rozłączanie będzie miało duże skutki na wydajności?

0

Oczywiście, czas łączenia może być dosyć długi. Jak serwer nie odpowie ci na "select now()" to nie jesteś już połączony.

0

Aha rozumiem, to więc wystarczy sprawdzać czy zmienna MYSQL *conn, nie jest NULL'em i dać na to warunek, ze gdy jest to nawiązywać połączenie i wszystko powinno działać tak? Czy może ta zmienna przyjmuje inną wartość w razie rozłączenia?

0

Przy połączeniu sprawdzasz co zwróciła funkcja real_connect.
Dalej jedyny sposób sprawdzić to wysłać jakieś zapytanie które nie może zwrócić błędu z definicji, np:
select 0;
select now();
jeżeli funkcja wykonująca nie zwróciła błędu: "server gone" to znaczy nadal masz połączenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1