• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z połączeniem z zewnętrzną bazą danych C++

0 głosów
130 wizyt
pytanie zadane 5 lutego w C i C++ przez lolk45 Gaduła (3,210 p.)

Witam,
Robię projekt w C++ który wykorzystuje bazę MySQL. Na localhost (xampp) wszystko działa, natomiast po wpisaniu danych do zewnętrznej bazy danych nie następuje połączenie. To mój kod...

#include <mysql.h>

...

bool get_data() {
    MYSQL* conn;
    MYSQL_ROW row;
    MYSQL_RES *res;
    int qstate;

    conn = mysql_init(0);
    conn = mysql_real_connect(conn,"http://sql1.5v.pl","db-userXXXX","password","tabela",0,NULL,0);
    //conn = mysql_real_connect(conn,"localhost","root", "","tabela",0,NULL,0);

    if(conn) {
        //Dalszy kod, pobieranie danych
    }
    else return false;

    return true;
}

Wersja z localhost działa, natomiast wersja z zewnętrzną bazą już nie. Nie mogę też sprawdzić kodu błędu ani nic takiego. Pewnie coś źle robię ale mysql_error(conn) nic nie zwraca tylko crashuje program. Dane są poprawne, bo nimi się loguje na phpmyadmin na hostingu.

Próbowałem zmieniać adres na z i bez "http", ustawiać port na 3306, wyłączyć firewall. Zmiana "localhost" na "127.0.0.1" nie powoduje błędu, natomiast zmiana na "192.168.1.2" (ip komputera w sieci lokalnej) już nie pozwala na połączenie (port jest odblokowany).

Wygląda mi to jakby program nie mógł się połączyć z jakimkolwiek serwerem zewnętrznym.

1 odpowiedź

+2 głosów
odpowiedź 7 lutego przez j23 VIP (108,680 p.)
wybrane 7 lutego przez lolk45
 
Najlepsza

Pewnie coś źle robię ale mysql_error(conn) nic nie zwraca tylko crashuje program.

Crashuje, bo conn jest NULL. Tak zrób:

if(!mysql_real_connect(conn,"http://sql1.5v.pl","db-userXXXX","password","tabela",0,NULL,0)) 
{
	std::cerr << "MySQL error: " << mysql_error(conn) << '\n';
	return false;
}

 

komentarz 7 lutego przez Secrus Nałogowiec (32,340 p.)
A wyjątkami nie można? Trochę bardziej 'nowoczesny' sposób chyba, nie?
komentarz 7 lutego przez j23 VIP (108,680 p.)

Można, ale OP zastosował tradycyjny sposób komunikowania błędów, więc przy takim zostałem (choć powinienem zastosować std::cerr zamiast printf).

komentarz 7 lutego przez lolk45 Gaduła (3,210 p.)

Dzięki, to pomogło. Wiem już jaki jest błąd. W konsoli pokazuje:
Nr błędu 2005 - Unknown MySQL server host (11001)

Natomiast gdy spróbuję połączyć się z bazą z php (xampp) dostaję:
Nr błędu 2002 - Error: Próba połączenia nie powiodła się, ponieważ połączona strona nie odpowiedziała poprawnie po ustalonym okresie czasu lub utworzone połączenie nie powiodło się, ponieważ połączony host nie odpowiedział.

Jednak gdy wrzuciłem ten sam kod php na hosting, z którego jest baza to okazało się że błędu nie ma i następuje pomyślne połączenie.

Z tego wnioskuje, że problem jest z tym, że z bazą można łączyć się tylko z php znajdującego się na hostingu. Pewnie muszę poszukać innej bazy MySQL na innym hostingu, który pozwoli na łączenie się spoza ich serwerów.

komentarz 7 lutego przez lolk45 Gaduła (3,210 p.)
Już znalazłem inną bazę (www.freemysqlhosting.net) i wszystko działa. Jest 5MB za darmo, ale to mi wystarczy. Program pobiera wszystko w rozsądnym czasie, tak samo jak na localhost.
komentarz 7 lutego przez Secrus Nałogowiec (32,340 p.)
Może być tak, że jest zablokowany dostęp z zewnątrz, żeby utrudnić kradzież danych z bazy. Obejściem tego mogłoby być wysyłanie danych do endpointa w PHP i odbieranie tego co PHP dostanie z bazy, ale to bardzo na siłę i tylko jeśli by się uprzeć...

Podobne pytania

0 głosów
0 odpowiedzi 39 wizyt
0 głosów
0 odpowiedzi 152 wizyt
pytanie zadane 23 lipca w SQL, bazy danych przez Luckyluck87 Użytkownik (560 p.)
0 głosów
2 odpowiedzi 712 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

67,210 zapytań

114,169 odpowiedzi

241,978 komentarzy

45,754 pasjonatów

Przeglądających: 331
Pasjonatów: 12 Gości: 319

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...