PHP: Databáze

17. 6. 1999
Doba čtení: 4 minuty

Sdílet

Dnes se podíváme na podstatnou část knihovny vestavěných funkcí, které nám dovolují přistupovat z PHP k různým databázím. A nebyl bych to já, kdybych nezačal malým zamyšlením nad možnostmi, které nám spojení html a databází poskytuje.
SQL a web

Zřejmě nejdůležitější a nejčastější aplikací PHP je vytváření webových interface k SQL databázím; z druhé strany se SQL databáze stávají nepostradatelnou součástí mnoha před časem „normálních“ webů. Typickou databázovou aplikací je internetový obchod – zde je PHP ideální platformou (jeden takový mám na starosti a mohu potvrdit, že funkční jednoduchý obchod napíšete v PHP pomocí několika skriptů i za pár dnů). Databáze však nabízí bezpočet jiných smysluplných aplikací. Například zpravodajské servery (včetně Roota) mívají články uložené v databázi, což umožňuje jednoduchou implementaci vyhledávání a zejména zjednodušuje správu takového serveru (zkuste si představit denně aktualizovat server vytvořený pomocí statických html stránek).

Podobnou techniku lze využít i u rozsáhlých firemních informačních webů, kde sice aktualizace neprobíhají tak často, ale pokud váš site obsahuje mnoho podobných stránek, lišících se pouze obsahem, ušetří vám PHP mnoho práce. Umístíte texty, odkazy a obrázky do databáze a napíšete jeden (nebo několik málo) skript (ů), které vytvoří stránku z databáze s jednotným layoutem. Nakonec stvoříte pro autory obsahu nějaký publikační systém, umožňující doplňování a opravu databáze, opět nejlépe s webovým interface, a můžete svěřit správu obsahu webu i počítačovým neodborníkům.

Jiným zajímavým využitím databází je sledování a vyhodnocování „sessions“ – technika, umožňující rozlišit jednotlivé uživatele a přenášet informace o „stavu“ uživatele mezi různými stránkami. Můžete autorizovat jednotlivé uživatele, sledovat jejich pohyb po stránkách, umožnit nastavení individuálních preferencí webu (jazyk, oblasti zájmu nebo třeba barvy atd.) – takový systém může poskytnout cenné marketingové informace provozovateli stejně jako pohodlí a výkon návštěvníkům webu.

Poslední oblastí využití databází s html interfacem, o které bych se rád zmínil, jsou intranetové obchodní agendy. Dovedu si představit kompletní firemní informační systém napsaný v PHP. „Opravdovým“ programátorům v Delphi :) to může připadat mírně řečeno zvláštní, ale výhody takového řešení jsou zřejmé. Celý systém běží na JEDNOM počítači, správa klientů se omezí na fungující browser, nejste omezeni klientskou platformou (takže můžete zavést hromadně Linux :) ), browser už umí každý ovládat, systém je připraven pro vzdálenou práci (šéf si doma přepočítá pohledávky) atd.

SQL servery
PHP umí komunikovat s mnoha různými SQL servery – pro každý podporovaný typ existuje sada podobných funkcí, umožňujících minimálně připojení k serveru, odeslání SQL query, přístup k výsledné tabulce a případnému chybovému hlášení serveru. Pro ilustraci uvádím příklad, vypisující cosi z databáze PostgreSQL:

$c = pg_Connect('localhost','5432',,'databaze');
$q = "SELECT nazev, link FROM seznam WHERE kategorie='".$kat."';";
$r = pg_exec($c, $q);
for ($i=0; $i<pg_numrows($r); $i++) {
  echo '<A href="'.pg_result($r, $i, 'link').'">'.
       pg_result($r, $i, 'nazev').'</A>';
  echo '<BR>';
}

V současné době podporuje PHP přímo tyto SQL servery: Adabas D, Informix, Interbase, mSQL, MySQL, Sybase, Oracle, PostgreSQL, Solid, MSSQL a prostřednictvím ODBC teoreticky jakýkoliv jiný SQL server.

SQL zadarmo
Pokud jste tak jako já příznivci kvalitního Open Source software, budete se pravděpodobně rozhodovat mezi PostgreSQL a MySQL (ten sice Open Source není, ale pokud ho nehodláte distribuovat za úplatu, zůstává pro vás v kategorii free software. Koneckonců ani PostgreSQL není pod GNU licencí, autoři nám neslibují, že všechny budoucí verze budou taky free.) Srovnání těchto dvou produktů je minimálně téma na samostatný článek a příčinou mnoha sporů v různých konferencích. Jako vždy záleží nejvíce na oblasti použití. Osobně používám PostgreSQL tak trochu z nutnosti, MySQL se mi začíná líbit více. Je mnohem rychlejší (prý i ve srovnání s komerčními produkty jako MSSQL), nabízí bohatou a praktickou sadu vestavěných typů a funkcí, data ukládá velmi efektivně a je velmi dobře zdokumentován. Neumí však transakce ani některé moderní prvky jako jsou triggery nebo uložené procedury. Transakce na webu ale příliš nevyužijete a dají se v případě nutnosti nahradit zamykáním tabulek. Pro aplikace, kde potřebujete vysoký výkon mnoha paralelních přístupů, které data pouze čtou, je MySQL ideálním řešením. Na druhou stranu v mnoha aplikacích oceníte zejména bohaté možnosti programování logiky databáze a transakční zpracování v PostgreSQL. Například pro intranetové firemní agendy je podle mne PostgreSQL mnohem vhodnější.

ict ve školství 24

Ostatní ne-SQL databáze
U nás, kde většina menších firem stále používá účetní programy pod DOSem, určitě oceníte možnost přístupu k dBase tabulkám (bez možnosti indexování). Mám v PHP napsány skripty, které čtou skladové zásoby z našeho účetnictví a aktualizují SQL databázi internetového obchodu. Setkal jsem se zde s jediným problémem: velmi praktická funkce dbase_get_recor­d_with_names (která mimochodem pochází z Čech), bez níž se nedostanete na záznam prostřednictvím názvů fieldů, je nezdokumentovaná, takže jsem se o její existenci dozvěděl náhodou prohlídkou zdrojových kódů.

Co se týče dalších podporovaných ne-SQL databází, nemám s nimi žádné zkušenosti, takže jen stručně: systém pro správu dokumentů Hyperwave, unixová specialita trochu připomínající Windows registry Dbm a DBAa jakési mně úplně cizí FilePro.