Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]PDO sprawdzanie czy połączenie aktywne
Blackall
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 28.08.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam,

posiadam pare skryptów wykonywanych cyklicznie lub 24h/dobę z poziomu ssh, napisane oczywiście w PHP.

Problem jest jednak taki, ze czasami zapytanie/łączenie z zewnętrzną stroną trwa długo i skrypt przerywa połączenie z bazą.

W jaki najprostszy sposób sprawdzić, czy obiekt klasy PDO jest cały czas połączony? mysql_ping zapewne tu nie zadziała?

W tej chwili mój skrypt wygląda mniej więcej tak:

Kod
$db = new PDO( )

while(true)
{
   // wykonywanie operacji
}


Może dobrym pomysłem byłoby inicjowanie $db w pętli? Wtedy jednak musiałbym to robić średnio 5 razy na sekundę w kilku skryptach, co nie wiem czy dobrze wpłynęłoby na wydajność.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Spróbuj wysłać zapytanie np
  1. SELECT VERSION()

I jeżeli zwróci wyjątek (że brak połączenia), nawiąż je ponownie.


--------------------
Go to the top of the page
+Quote Post
Blackall
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 28.08.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


w sumie nie głupie, aczkolwiek ostatnio bardzo zwracam uwagę na optymalizację bo jednak troche CPU te kilka procesów zabiera (wczoraj walczyłem i udało mi się z ok 20% CPU zrobić 6-7% dla wszystkich opadalonych na raz)

Nie ma możliwości wychwycenia w jakiś sposób zakończenia połączenia? Ale sprawdzanie czy jest ono aktywne bez wykonywania zapytania?
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Nie mam za bardzo czasu na testy więc sprawdź sobie:
  1. $pdo = new PDO(...);
  2.  
  3. var_dump($pdo->getAttribute(PDO::ATTR_SERVER_INFO));
  4. var_dump($pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS));
Go to the top of the page
+Quote Post
Blackall
post
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 28.08.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(Crozin @ 6.12.2010, 17:30:30 ) *
Nie mam za bardzo czasu na testy więc sprawdź sobie:
  1. $pdo = new PDO(...);
  2.  
  3. var_dump($pdo->getAttribute(PDO::ATTR_SERVER_INFO));
  4. var_dump($pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS));

Kod
<?php
include('./Mysql.php');

echo PDO::ATTR_CONNECTION_STATUS;
?>


pomimo braku połączenia zwraca... 7
w przypadku nawiązania połączenia ($db = new Mysql()winksmiley.gif też zwraca 7 smile.gif

server_info to samo tylko szóstka
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Taa... pewnie dlatego, że stała PDO::ATTR_CONNECTION_STATUS ma wartość 7. Zauważyłeś, że ta stała jest podawana jako argument PDO::getAttribute()?
Go to the top of the page
+Quote Post
Blackall
post
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 28.08.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(Crozin @ 6.12.2010, 22:15:51 ) *
Taa... pewnie dlatego, że stała PDO::ATTR_CONNECTION_STATUS ma wartość 7. Zauważyłeś, że ta stała jest podawana jako argument PDO::getAttribute()?

tak tylko ze getAttribute nie jest metodą statyczną, wiec nie moge jej wywołać nie mając obiektu.

A generalnie wlasnie o to chodzi ze jesli nie będzie połączony to (chyba?) obiekt nie będzie wtedy istniał i nie wykonam tej metody (wyrzuci błąd)

może w związku z tym po prostu sprawdzać czy obiekt istnieje? (o ile moje rozumowanie jest ok co do braku połączenia = braku obiektu)
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Oczywiście, że obiekt sam w sobie będzie istniał.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 07:16