Oznámení
[BUG] fluent interface a vyhazování výjimek
před 10 lety
- BigCharlie
- Člen | 267
Narazil jsem při práci s dibi na jednu chybu. Předpokládal jsem, že pokud postavím dotaz pomocí query nebo fluent interface, nebudu pozorovat rozdíl. Ale jeden zásadní jsem našel. Řekněme, že mám kód
<?php
try {
return dibi::select('*')->from('a');
}
catch (Exception $e) {
echo "Houstone, máme problém!";
}
?>
Co se stane, pokud při vykonání dotazu dojde k chybě? Pokud očekáváte vypsání hlášky, dibi vás zklame. Dojde k vyhození výjimky (DibiDriverException) na úrovni dibi driveru, která není zachycena (zřejmě neprobublá přes fluent interface).
Pokud dotaz přepíšu pomocí dibi::query, výjimka je zachycena.
Editoval BigCharlie (29. 10. 2009 11:31)
před 10 lety
- Honza M.
- Člen | 1674
Aby dibi fluent něco dělalo, tak je na něm potřeba zavolat metodu execute případně fetch, fetchAll apod.
před 10 lety
- BigCharlie
- Člen | 267
Aby dibi fluent něco dělalo, tak je na něm potřeba zavolat metodu execute případně fetch, fetchAll apod.
Aha, v tom je ten problém. Protože dibi fluent mi něco dělá (tj. vrátí výsledky) i když nezavolám žádnou z těch metod. Na oplátku neprobublá výjimka. Pokud zavolám, výjimka probublá.
Problém vyřešen, case closed. Jen jsem hledal, kam bych to v dokumentaci přidal (jako poznámku o nutnosti volání těch metod). Ale kam?
A díky!