Š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:

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.