Klasikou, kterou najdete snad ve všech ukázkách práce s databází v PHP pro začátečníky, je použití řady příkazů: mysql_connect() pro spojení s databází, mysql_select_db() pro výběr databáze, sestavení dotazu, jeho odeslání pomocí mysql_query(), zpracování výsledku pomocí mysql_fetch_assoc() atd. Tuto ukázku najdete také v mém starším článku Jak vytvořit Excelové sešity pomocí PHP.
Ne, že by základy práce s databází v PHP byly nějak těžké, ale je tu relativně velký počet funkcí, se kterými musíte pracovat. S pomocí různých frameworků si získávání dat z databází můžete ulehčit, většinou skončíte s mnohem jednodušším zápisem. Stejně tak, pokud třeba tvoříte moduly v Drupalu, který lze z pohledu programátora rovněž brát jako nějaký framework.
Jestliže se ale nechcete učit nějaký rozsáhlejší framework a přesto si chcete práci s dolováním dat z databáze ulehčit, koukněte na knihovnu NotORM. Zjednodušuje práci s databází na naprosté minimum, zejména co se týče filtrování dat a seskupování informací získaných z více tabulek.
Ukázka použití NotORM
Koukněme na velice jednoduchý příklad. V databázi adresar máme tabulku zakaznici, která má mimo jiné sloupečky id, jmeno, ulice, mesto, psc a email. Informace z této databázové tabulky chceme zobrazit na webové stránce ve formě HTML tabulky.
{syntaxhighlighter brush: php;fontsize: 100; first-line: 1; } Ukázka použití knihovny NotORM body{ font-family: Verdana; font-size: 12px; } table{ border-collapse: collapse; border: 3px solid #333; } table th{ font-weight: bold; background: #ccc; } table th, table td{ border: 1px solid #333; padding: 3px 15px; } table tr:nth-child(even){ background: #efefef; }
Jméno | Ulice | Město | PSČ | |
---|---|---|---|---|
$zakaznik[jmeno] | "; print "$zakaznik[ulice] | "; print "$zakaznik[mesto] | "; print "$zakaznik[psc] | "; print "$zakaznik[email] | "; print "
Vytvoříme proto kód s doplněním krátkého CSS, aby výsledek vypadal trochu lidsky. Hlavní část ukázky je samozřejmě v kódu PHP. Nejprve připojíme soubor NotORM.php, který získáte stažením balíčku s knihovnou a jejím rozbalením. V projektu si kromě tohoto souboru ponechejte i podadresář NotORM.
Jelikož NotORM využívá PDO, spojíme se s databází jeho syntaxí. Tedy žádné mysql_connect(). PDO slouží pro univerzální připojování k různým databázím. Uvedeme tedy typ databáze, adresu serveru, na kterém databáze běží, název databáze, znakovou sadu, port, na kterém databáze naslouchá (není-li standardní) a jako další dva parametry jméno a heslo pro připojení k databázi. Všimněte si, že data v řetězci prvního parametru jsou oddělena středníkem.
Poslední parametr, který mám v konstrukci PDO uveden, slouží k přinucení PHP dodávat řetězce ve znakové sadě UTF-8. Možná ve vašem skriptu nebude nutný.
Z vytvořeného objektu PDO pak sestavíme nový objekt NotORM jednoduchým voláním new NotORM(). A nyní si již můžeme užívat snadné práce s databázovými tabulkami a jejich daty. V případě ukázky je to procházení všech řádků v tabulce zakaznici a jejich převedení na pole $zakaznik. To obsahuje všechny sloupečky. Konstrukcí $zakaznik[nazev_sloupce] můžeme získat hodnotu daného sloupečku.
Smyčkou foreach tedy projdeme všechny řádky v tabulce a vypíšeme je do HTML výstupu. Výsledek vypadá takto:
Řazení a filtrování dat pomocí NotORM
Knihovna NotORM samozřejmě podporuje i filtrování a řazení dat získávaných z databáze. V tom případě ale musíte konstrukci mírně upravit:
{syntaxhighlighter brush: php;fontsize: 100; first-line: 1; } <?php include "NotORM.php"; $pdo = new PDO("mysql:host=127.0.0.1;dbname=adresar;charset=UTF-8;port=33066","drupaluser","",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $db = new NotORM($pdo); $zakaznici = $db->zakaznici() ->select("id, jmeno, ulice, mesto, psc, email") ->where("email LIKE ?","%localhost%") ->order("mesto") ->limit(10) ; foreach ($zakaznici as $id => $zakaznik) { print "
Jak vidíte, manuálně zde vybereme sloupečky tabulky, se kterými chceme pracovat. Je to proto, abychom zbytečně nezískávali velkou množinu dat, kterou nevyužijeme a tedy zbytečně nezatěžovali databázový server. Konstrukcí ->where() omezíme získané řádky jen na takové, které mají nějakou odpovídající hodnotu. Pomocí ->order() můžete výsledek seřadit dle zvoleného sloupce a konečně pomocí ->limit() zase omezit počet získaných řádků.
Náš příklad tedy vrátí maximálně deset záznamů z tabulky zakaznici, kde je v e-mailové adrese výraz localhost a seřadí je abecedně podle města.
Knihovna NotORM toho umí mnohem více. Detailní informace o filtrování dat pomocí ->where(), stejně jako o použití konstrukcí pro JOIN a GROUP najdete v NotORM API. A abych se ještě vrátil k těm frameworkům zmíněným na začátku článku. NotORM můžete stahovat jako samostatnou knihovnu, ale setkáte se s ní i v Nette Frameworku.
Soubor s příkladem najdete v příloze článku.
Příloha | Velikost |
---|---|
Ukázka použití knihovny NotORM | 923 bajty |
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Přidat komentář