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

VPS Starter Arubacloud
0 głosów
822 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,920 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,920 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 162 wizyt
0 głosów
0 odpowiedzi 1,962 wizyt
pytanie zadane 23 lipca 2019 w SQL, bazy danych przez Luckyluck87 Użytkownik (660 p.)
0 głosów
2 odpowiedzi 932 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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 - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich 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 10% 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!

...