Návrh databázové třídy - díl VI - Závěr
Š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 "<pre>";
echo "pocet provedenych dotazu: ".$db->numQueries();
print_r($db->getQueries());
echo "</pre>";
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
Edit 4. 5. 2020:
Text se týká PHP 5. Pod PHP 7 už třída fungovat nebude, protože všechny mysql_ funkce skončí chybou.
Komentáře k článku:
Buďte první, kdo článek okomentuje!