Portál AbcLinuxu, 25. dubna 2024 06:40


Dotaz: PDOException se občas nezachytí

22.3.2013 16:43 Dan
PDOException se občas nezachytí
Přečteno: 173×
Odpovědět | Admin
Zdravím, běží mi jeden démon na PHP a občas se stane, že když se dlouho nepoužije connection tak connection vyvolá vyjímku
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Dočetl jsem se, že to je normální a je to způsobené wait_timeout. Ale mě to vlastně zas tak moc netrapí, stává se to jen když několik hodin databáze nezapisuje, takže jsem ji chtěl odchytit:
try{
   $connection->query(...);
} catch (\PDOException $e){
   $connection = new PDO(...);
   $connection->query(...);
}
To by mělo zajistit bezproblémový průběh, ale občas se stane, že mi to přesto selže a v logu mam, že nastala vyjimka "PDOException SQLSTATE[HY000]: General error: 2006 MySQL server has gone away" na řádku v bloku try, což by se nidky nemělo stát! Proste občas catch neodchytí. Jak je to možné?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.3.2013 10:55 Kit
Rozbalit Rozbalit vše Re: PDOException se občas nezachytí
Odpovědět | | Sbalit | Link | Blokovat | Admin
Do bloku catch by se takové věci dávat neměly, protože vznikají duplicity a neřeší problém s opakovaným výpadkem. Daleko vhodnější by bylo celý blok uzavřít do cyklu, na jehož začátku by bylo otevítání databáze. V bloku try by pak byly všechny potřebné operace s DB, nejen to jedno query. V catch stačí continue.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.