![]() |
![]() |
![]()
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ść. |
|
|
![]() |
![]()
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
I jeżeli zwróci wyjątek (że brak połączenia), nawiąż je ponownie. -------------------- |
|
|
![]()
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? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 28.08.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie mam za bardzo czasu na testy więc sprawdź sobie:
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() ![]() ![]() server_info to samo tylko szóstka |
|
|
![]()
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()?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 28.08.2004 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()? 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) |
|
|
![]()
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ł.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 07:16 |