tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

[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!