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 dotazDB::results($sql, $params = [])– vrátí více řádkůDB::row($sql, $params = [])– vrátí jeden řádekDB::var($sql, $params = [])– vrátí jednu hodnotuDB::col($sql, $params = [])– vrátí jeden sloupecDB::prepare($sql)– připraví SQL příkazDB::beginTransaction(),commit(),rollBack()– správa transakcíDB::set($fields)– generuje SET část dotazuDB::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,$numRowssetting(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 -
DB2se 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
PDOHandlerje 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
Baseposkytuje metadata jako poslední dotaz, počet řádků, chybové hlášky atd. - Pro druhou databázi použij
DB2s explicitní inicializací