NotORM: snadné čtení údajů z databáze v PHP

Pro přístup k datům uloženým v databázi můžete používat celou řadu konstrukcí. Vytváříte-li vlastní skripty bez použití nějakého frameworku, může být přístup k databázi relativně zdlouhavý. Zkuste proto knihovnu NotORM.

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; }

<?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); foreach ($db->zakaznici() as $zakaznik) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; } ?>
Jméno Ulice Město PSČ E-mail
$zakaznik[jmeno]$zakaznik[ulice]$zakaznik[mesto]$zakaznik[psc]$zakaznik[email]
{/syntaxhighlighter}

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:

NotORM

Ř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 ""; print "$zakaznik[jmeno]"; print "$zakaznik[ulice]"; print "$zakaznik[mesto]"; print "$zakaznik[psc]"; print "$zakaznik[email]"; print ""; } ?> {/syntaxhighlighter}

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
Tagy

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

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.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru