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

PDO i kilka połączeń do bazy MySQL raz za czas wysypuję błędem

Aruba Cloud - Virtual Private Server VPS
0 głosów
1,396 wizyt
pytanie zadane 21 listopada 2015 w SQL, bazy danych przez Pytający Początkujący (290 p.)
Witam,

Mam pewien problem z PDO i MySQL.

Mianowicie mam projekt w którym integruje dwie oddzielne bazy Mysql.

takim sposobem robie sobie połączenia:

 try
 {
   $db = @new PDO('mysql:host='.$dbhost.';dbname='.$dbname.'', ''.$user.'', ''.$pass.'',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
    echo 'Połączenie nawiązane!';
 }
 catch(PDOException $e)
 {
    echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
 }
 

Analogicznie drugie połaczenie wygląda tak samo z różnicą danych do MySql i zmieną połaczenia.

Przy odświeżaniu strony albo przy przechodzeniu na podstronę w której mam kilka zapytań do bazy wzór zapytania:

$stmt = $db->prepare("SELECT * FROM tabela");        
$stmt->execute();            
 while($row = $stmt->fetch())
   {
     echo'działa';
    }   

$stmt->closeCursor();    

często ale nie zawsze wystepuje taki bład:

"Nie można nawiązać połączenia, ponieważ komputer docelowy aktywnie go odmawia. "

oraz przy zapytaniu:

"Fatal error: Call to a member function prepare() on a non-object in "

Co ciekawe ten błąd zawsze odwołuje sie do tej "drugiej" bazy.

 

Co może być przyczyną? Nie kończe połączeń do bazy albo zapytań gdy je wykonam i przez to baza danych MySQL nie ma już wolnego miejsca dla mojego połączenia? Może baza ma ograniczone połączenia albo częstotliwość zapytań?

Będę wdzięczny za jakiekolwiek sugestie i pomysły.

2 odpowiedzi

+1 głos
odpowiedź 21 listopada 2015 przez efiku Szeryf (75,160 p.)
1. Sprawdz serwer zdalny , możlie, że ustawiony jest tak, aby akceptować tylko lokalne połączenia z bazą. Ponieważ bez problemu można trzymać połączenia z kilkoma bazami  ;)

2. Gdzie nauczyłeś się tak tak bardzo złej praktyki jak stosowanie @ w kodzie?  Wiesz wgl co daje try catch?? PDO Rzuca wyjątkiem jak nie ustanowi połączenia, ten wyjątek łapiesz własnie blokiem try ... catch.

3. Błąd mówi, że próbujesz się odwołać do metody obiektu $db którym jest  boolean albo null. ( no nie udało się połączyć z bazą to myk)

 

Postaram się pokazać Ci przykładowy kod w oparciu o sqlite.
komentarz 21 listopada 2015 przez Pytający Początkujący (290 p.)
1. Gdyby było tak ustawione to razczej za kazdym razem byłby ten błąd? A tak to jest raz za czas...

2. Z począktu jak uczyłem się PDO to w kilku kursach zawsze była @... i tak ją już zostawiałem. Ale faktycznie przecież wyłapuje błędy i ich nie pokazuje :)

3. Tak, błąd mówi nam że nie można się połączyć z bazą danych, albo jest niedostępna lub nie odpowiada.
komentarz 21 listopada 2015 przez efiku Szeryf (75,160 p.)
komentarz 21 listopada 2015 przez efiku Szeryf (75,160 p.)
aa no rzeczywiście, myślałem, że wgl nie masz dostępu do drugiej zdalnej bazy.

No to skoro aktualnie go odmawia, to napisz tam do nich, aby przestał odmawiać :D

Support myślę, że da radę.
komentarz 21 listopada 2015 przez Pytający Początkujący (290 p.)

Przerobiłem na szybko na Twój szablon tworzenia połączenia ale dalej ten sam błąd wyskakuje, nie za każdym razem ale wyskakuje...

Powiedz i proszę czy ja dobrze myślę, a mianowicie czy ten kod:

$stmt = $db->prepare("SELECT * FROM tabela");        
$stmt->execute();            
 while($row = $stmt->fetch())
   {
     echo'działa';
    }   

$stmt->closeCursor(); 

Tworzy mi tak jaby nowe połączenie do bazy? I tak ma być? czy jest jakiś inny sposób?

0 głosów
odpowiedź 21 listopada 2015 przez Szymon Lisowiec Mądrala (7,150 p.)

Nie zapomniałeś zamykać połączenia z bazą?
 

$db = null;

 

komentarz 21 listopada 2015 przez Pytający Początkujący (290 p.)
Ale ogólnie to dobrze robię te zapytania i tworzenie połączeń?

Mianowicie czy jest jakaś opcja w której tylko raz otwieram połączenia do baz a potem w ramach tego jednego połączenia wykonuje kilka zapytań?
komentarz 21 listopada 2015 przez Pytający Początkujący (290 p.)
Niestety, po dodaniu portu również występuje ten błąd...
komentarz 21 listopada 2015 przez Szymon Lisowiec Mądrala (7,150 p.)
Tak.

Hmm, może napisz do supportu hostingu tej bazy danych z którą masz problem?
komentarz 21 listopada 2015 przez Pytający Początkujący (290 p.)
Spróbuje ich zapytać w czym może być problem albo żeby logi podesłali.

A co z tym „jednorazowym” połączeniem jest na to jakiś sposób?

Żeby nie otwierać za każdym razem nowego połączenia?

PS. Dzięki za zainteresowanie :)
komentarz 21 listopada 2015 przez Szymon Lisowiec Mądrala (7,150 p.)
W PHP takiego nie uzyskasz. Możesz np. w nodejs nawiązać stałe połączenie.

Ok, proszę. ;)

Podobne pytania

0 głosów
2 odpowiedzi 554 wizyt
–2 głosów
1 odpowiedź 295 wizyt
pytanie zadane 30 czerwca 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
2 odpowiedzi 319 wizyt
pytanie zadane 29 listopada 2015 w PHP przez Widemo Użytkownik (920 p.)

93,264 zapytań

142,260 odpowiedzi

322,234 komentarzy

62,582 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

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!

...