Skip to content

Popis tříd k přístupu k databázi

Tento dokument popisuje hlavní PHP třídy v core/database. Cílem je přiblížit novému vývojáři, jak třídy fungují, jak spolu souvisejí a co je jejich odpovědnost.


Třída DB

Statická brána k databázovému rozhraní. Poskytuje přístup k metodám přes statické volání, ale veškerou práci deleguje na vnitřní instanci třídy PDOHandler.

Automatická inicializace (lazy loading)

Třída DB využívá lazy initialization - připojení k databázi se vytvoří automaticky při prvním volání libovolné metody (query(), results(), row(), atd.). Není nutné manuálně volat DB::init() ani includovat app/database.php.

Příklad:

// Automaticky se inicializuje při prvním dotazu
$users = DB::results("SELECT * FROM users");

Klíčové public metody

  • DB::init(...) – inicializuje spojení s databází (voláno automaticky)
  • DB::query($sql, $params = []) – provede SQL dotaz
  • DB::results($sql, $params = []) – vrátí více řádků
  • DB::row($sql, $params = []) – vrátí jeden řádek
  • DB::var($sql, $params = []) – vrátí jednu hodnotu
  • DB::col($sql, $params = []) – vrátí jeden sloupec
  • DB::prepare($sql) – připraví SQL příkaz
  • DB::beginTransaction(), commit(), rollBack() – správa transakcí
  • DB::set($fields) – generuje SET část dotazu
  • DB::escape($string) – escapuje string (výjimečně)

Třída PDOHandler

Třída, která drží instanci PDO a vykonává reálné SQL operace. Je použita v rámci DB::$DB.

Klíčové public metody

  • __construct(...) – vytvoření připojení.
  • query($sql, $params = [])
  • prepare($sql)
  • beginTransaction(), commit(), rollBack()
  • getLastInsertId()
  • getLastError()

Třída Base

Poskytuje základní infrastrukturu – výsledky dotazů, stavové proměnné a možnosti nastavení.

Klíčové vlastnosti

  • $lastQuery, $lastError, $lastResult, $insertId, $affectedRows, $numRows
  • setting(array $array)

Vztahy mezi třídami

classDiagram
    class DB {
        +static init()
        +static query()
        +static prepare()
        +static beginTransaction()
        +static getLastInsertId()
    }

    class PDOHandler {
        +query()
        +prepare()
        +getLastInsertId()
        +getLastError()
    }

    class Base {
        +lastQuery
        +lastError
        +setting()
    }

    DB --> PDOHandler : obsahuje instanci
    PDOHandler --> Base : dědí

Třída DB2

Druhá instance databázového připojení pro vzácné případy, kdy je potřeba připojení k externí nebo sekundární databázi.

Rozdíly oproti DB

  • Nutná explicitní inicializace - DB2 se neinicializuje automaticky
  • Stejné API jako DB - všechny metody fungují identicky
  • Oddělené připojení - nezasahuje do primární databáze

Použití

use Petrovo\Database\DB2;

// Explicitní inicializace
DB2::init($user, $password, $database, $host, 'utf8', $port);

// Dotazy na druhou databázi
$product = DB2::row("SELECT * FROM products WHERE id = ?", [$id]);

Poznámka: Používá se zřídka (např. integrace se starším systémem).


Shrnutí (důležité pro vývojáře)

  • Používej DB:: pro veškeré databázové operace – je to stabilní a připravené API
  • Nevyžaduje manuální inicializaci - připojí se automaticky při prvním dotazu
  • Třída PDOHandler je interní vrstva — nemusíš ji používat přímo
  • Vždy používej parametrizované dotazy (DB::query($sql, $params))
  • Výsledky dotazů vrací objekty (PDO::FETCH_OBJ), tzn. přístup přes ->columnName
  • Třída Base poskytuje metadata jako poslední dotaz, počet řádků, chybové hlášky atd.
  • Pro druhou databázi použij DB2 s explicitní inicializací