• 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++

Hosting forpsi easy 1 pln
0 głosów
583 wizyt
pytanie zadane 5 lutego 2019 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 2019 przez j23 Mędrzec (194,340 p.)
wybrane 7 lutego 2019 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 2019 przez Secrus Nałogowiec (32,880 p.)
A wyjątkami nie można? Trochę bardziej 'nowoczesny' sposób chyba, nie?
komentarz 7 lutego 2019 przez j23 Mędrzec (194,340 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 2019 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 2019 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 2019 przez Secrus Nałogowiec (32,880 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 153 wizyt
0 głosów
0 odpowiedzi 1,834 wizyt
pytanie zadane 23 lipca 2019 w SQL, bazy danych przez Luckyluck87 Użytkownik (660 p.)
0 głosów
2 odpowiedzi 917 wizyt

92,089 zapytań

140,748 odpowiedzi

317,711 komentarzy

61,408 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (jeszcze tylko dziś 30.11 z okazji Black Week, a potem będzie to 30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 15% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...