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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,246 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 (195,260 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 (195,260 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 176 wizyt
0 głosów
0 odpowiedzi 2,256 wizyt
pytanie zadane 23 lipca 2019 w SQL, bazy danych przez Luckyluck87 Użytkownik (660 p.)
0 głosów
2 odpowiedzi 1,104 wizyt

93,164 zapytań

142,176 odpowiedzi

321,938 komentarzy

62,493 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rucin93
  8. 641p. - rafalszastok
  9. 629p. - Piotr Aleksandrowicz
  10. 629p. - Adrian Wieprzkowicz
  11. 621p. - Dawid128
  12. 611p. - ksalekk
  13. 606p. - Mariusz Fornal
  14. 602p. - Michał Telesz
  15. 597p. - Hubert Chęciński
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...