Návrh databázové třídy - díl VI - Závěr

Mon, 14 Jul 2014 20:31:52 +1100

Šestým dílem bych rád uzavřel svůj seriál o databázové třídě a úvod do objektového programování v PHP5. Ukázali jsme si středně složitou třídu s obsluhou většiny typů SQL dotazů, které využijeme pro projekt průměrné náročnosti.

Kromě naprosto základních funkcí jako ošetření SQL dotazů proti SQL injection umí i jednoduché logování, export databáze buď do souboru nebo přímo do force downloadu i vlastní obsluhu chyb. Posílání chyb na e-mail zde ale obsažené není: na notifikační e-maily mám třídu další, o které si můžeme povědět v jiném článku. Nesmím také vynechat možnost připojení k více databázím v rámci jednoho projektu: i to class Db zvládne. Tak hurá na rekapitulaci.

Vytvoření instance

Přihlašovací údaje k databázi nastavíme v globálních proměnných. Klíč proměnné config, ve kterém bude třída hledat potřebná data můžeme změnit přímo v parametru konstruktoru; tímto pak můžeme vytvořit připojení k více databázím.

$config['db']['host'] // db server
$config['db']['user'] // uzivatel
$config['db']['pass'] // heslo
$config['db']['name'] // jmeno databaze

$db = new Db;

Nastavení ještě umožňuje zadání tří dalších nepovinných hodnot, které ale najdete až v komentářích ve zdrojové kódu.

Základní metody pro SQL dotazy

// asociativni pole z tabulky, zakladni (pokrocile nastaveni @227)
$query = $db->query("SELECT * FROM ?_tabulka WHERE id = '?' AND category_id = '?'", array($id, $category_id))->assocList();

// insert, vraci mysql_insert_id()
$insert_id = $db->insert('?_categories', array(
    'name' => $_POST['name'],
    'text' => $_POST['text'],
));

// update, zakladni (pokrocile nastaveni @499)
$affected_rows = $db->update('?_categories', $_GET['id'], array(
    'name' => $_POST['name'],
    'text' => $_POST['text'],
));

// delete, vraci opet mysql_affected_rows();
$deleted_rows = $db->delete('?_articles', array(
    'parent_id' => 1,
));

Debug

Jak jsem zmínil v úvodu, knihovna má obsažený i pár debugovacích funkcí pro případné ladění rychlosti SQL dotazů. Umí vypsat počet provedených dotazů + pole s jejich kompletním zněním i časem, jak dlouho který dotaz trval.

// debug
echo " ";
echo "pocet provedenych dotazu: ".$db->numQueries();
print_r($db->getQueries());
echo " ";

Export databáze

V neposlední řadě můžeme provést i export databáze. Buď celé nebo jen konkrétních tabulek či konkrétních částí daných tabulek. Tuto funkci nedoporučuji přidávat dynamicky do aplikace: sám ji používám vždy v podobě samostatného souboru kam kód i podmínky napíšu ručně, takže i vám doporučuji stejnou logiku použití.

// export databaze
$db = new Db;
//$db->addExportCondition('shop_categories', '');
//$db->addExportCondition('shop_products', 'WHERE category_id IN (1,2,3)');
$db->dumpAndSave();
//$db->dumpAndDownload();

Odkazy:

Zdrojové kód: class.Db2.phps
ZIP ke stažení: class.Db2.zip