V minulém dílu jsme si probrali formuláře, teď se dostáváme k tématu, které dokáže údaje z formulářů beze zbytku využít.
Teprve spolupráce PHP s nějakým databázovým serverem umožňuje naplno rozvinout možnosti interaktivního webu. Přiznejme si na rovinu, že již delší dobu stoupá procento stránek generovaných z databází a růst jejich počtu se neustále zrychluje. Zprovoznit SQL server by pro pokročilejšího uživatele (zvláště znalce Unixu) neměl být problém.
Protože spolupráce PHP se SQL je téma velice obsáhlé, je lepší ho rozdělit na dva samostatné díly. V tomto díle se krátce seznámíme s vlastním jazykem SQL, v dalším pokračování se pak dostane na vlastní spolupráci s PHP.
Nejdříve ale pár slov o výběru SQL serveru. Pokud si doma zkoušíte PHP na Linuxu, pak lze doporučit PostgreSQL (dodáváno např. s nedávno vyšlou CZ distribucí RedHatu od Computer Pressu) nebo velmi rychlý MySQL. Oba dva jsou zdarma, za MySQL je potřeba zaplatit pouze při komerčním použití. Pro ty, co si PHP zkouší na platformě Windows, pak existuje verze MySQL (zdarma), nebo MS SQL Server (ten už ale stojí slušné peníze), pro jeho použití pro web je potřeba další licence (asi 100.000,- Kč).
Pro staženíchtivé čtenáře v krátkosti uvedu odkazy na domovské stránky:
Popis instalace a nastavení je vždy podrobně (někdy dokonce přehledně) popsán v dokumentaci.
Jenom dodatečně se zmíním o dalších známých SQL serverech, které PHP podporuje: Informix, Oracle, Sybase, ... Jedná se většinou o drahé, nicméně vynikající systémy. Jinou možností jak využít databáze v PHP je použití starších souborových databází (dBase, dbm).
Jsou možná výhodné pro začátečníky na vyzkoušení, nemusí se nic instalovat (pouze v souboru php.ini je potřeba příslušnou knihovnu povolit - smazáním středníku), v praxi se už ale téměř nepoužívají. Tady se ale nejedná o žádné SQL, takže tyto typy zde dál rozebírat nebudeme.
Základem všeho je databáze. Může být jedna, mohou jich být stovky - záleží pouze na výkonu serveru. Každá databáze pak může obsahovat neomezené množství tabulek. Tabulka pak může mít několik sloupců, které definují její strukturu. Řádky pak obsahují vlastní data. Např. tabulka s názvem LIDI:
Jmeno |
prijmeni |
rocnik |
Petr |
Novák |
1975 |
Pavel |
Nový |
1964 |
Jirka |
Nováček |
1955 |
Jazyk SQL je i pro neangličtináře dobře srozumitelný. Nejlepší pro pochopení je vrhnout se hned do praxe. Z uvedených příkladů bude všechno jasné.
Nejdříve je nutno tabulku vytvořit:
příkaz:
CREATE TABLE lidi(
jmeno varchar (20),
prijmeni varchar (35),
rocnik integer)
výsledek:
pokud jste se nepřeklepli, máte právo vytvářet nové tabulky atd., server Vám odpoví většinou velmi stručně: CREATE (nebo velmi podobně).
Jednotlivé datové typy, které je možno použít, vyčtete opět z dokumentace, nicméně ve všech SQL serverech je podporován standartní typ jako TEXT, ČÍSLO, DATUM, ANO/NE atd. Většina serverů má navíc i svoje vlastní specifické formáty, jejich použití může ale v budoucnu ztížit přechod na jiný systém, který je nepodporuje.
Dalším krokem je naplnění tabulky nějakými daty:
příkaz:
INSERT INTO lidi VALUES (`Petr`,`Novák`,1975)
výsledek:
Query OK, 1 row(s) affected
Tímto jsme přidali jeden řádek (row) do tabulky.
Všimněte si, že textová data musí být uzavřena v uvozovkách. Na konkrétním systému pak záleží, použijeme-li uvozovky jednoduché nebo dvojité.
Jakmile máme v tabulce nějaká data, můžeme pomocí příkazu SELECT (vyber) provádět "výběr".
Snad jen pro jistotu: hvězdička má funkci jako zástupný znak pro celou strukturu tabulky.
příkaz:
SELECT * FROM lidi WHERE jmeno = `Petr`
výsledek:
Petr Novák 1975
příkaz:
SELECT prijmeni FROM lidi WHERE rocnik<1970
výsledek:
Nový
Nováček
příkaz:
SELECT prijmeni FROM lidi WHERE (jmeno = `Jirka`) AND (rocnik<1970)
výsledek:
Nováček
Pozn. místo rovnítka je možno použít příkaz LIKE, jestliže chceme vybrat všechny, jejichž příjmení začíná třeba na písmena "Nová":
SELECT * FROM lidi WHERE prijmeni LIKE `Nová%`
Příkaz SELECT má docela pestrou škálu dalších parametrů. Těmto pokročilejším prvkům jazyka SQL možná věnujeme část příštího dílu.
Pokud chceme záznam vymazat (např. zaměstnanec byl propuštěn):
příkaz:
DELETE FROM lidi WHERE prijmeni = `Nováček`
výsledek:
Vymaže z databáze VŠECHNY záznamy, kde je příjmení Nováček.
V tomto okamžiku je vhodné zmínit se o tzv. primárním klíči (PK). Jako PK slouží prostě jeden sloupec tabulky, který obsahuje v každém řádku jedinečný, neopakovatelný údaj, podle kterého je např. daný člověk jednoznačně identifikovatelný. V předchozím případě by totiž mohl nastat problém - pokud bychom zaměstnávali více Nováčků.
V našem případě by ideální bylo rodné číslo. Přidáme proto do struktury tabulky další sloupec - rod_cislo.
příkaz:
ALTER TABLE lidi ADD (rod_cislo integer)
výsledek:
Tabulka má novou strukturu:
jmeno |
prijmeni |
rocnik |
rod_cislo |
Je nutno upozornit, že takovýto postup by v praxi nebyl příliš vhodný. Měnit datovou strukturu tabulky "za běhu" může způsobit takové problémy jako nutnost doplnit rodná čísla u stávajících zaměstnanců atd.
Před vytvořením tabulky je proto nanejvýš vhodné hluboce se zamyslet nad tím, jaké údaje by měla obsahovat, a vzít v potaz i nároky do budoucna.
Pokračujme dále. Nyní je tedy potřeba doplnit rodná čísla u některých zaměstnanců.
příkaz:
UPDATE lidi SET rod_cislo=7509073858 WHERE prijmeni = `Novák`
výsledek:
Panu Novákovi bylo přidáno jeho RČ.
Nyní jsme ale zjistili, že sloupec ročník už není potřeba, protože rok narození jsme schopni zjistit z rodného čísla. Zrušíme tedy celý sloupec rocnik. Pozor: zrušený sloupec již nelze zpětně obnovit!
příkaz:
ALTER TABLE lidi DROP rocnik
výsledek:
Tabulka má novou strukturu:
Zrušením sloupce jsme navíc ušetřili místo a zrychlili práci s tabulkou. Samozřejmě čím menší tabulka, tím rychlejší je odezva SQL serveru. V našem případě by změna v rychlosti byla samozřejmě nezměřitelná, ale u tabulek s mnoha miliony záznamů by změna v rychlosti mohla být velice citelná.
Probrali jsme si několik základních prvků práce s tabulkou v SQL (vytváření, zadávaní a mazání dat, jejich změna, přidání a ubrání sloupce).
Možnosti SQL jsou mnohem a mnohem větší, pokud toto téma někoho zaujme, tak na trhu je v současné chvíli dostupných několik kvalitních titulů na téma SQL (dokonce od českých autorů).
Příště se dostaneme k vlastní spolupráci SQL s PHP, tedy jak se připojit k databázi, jak zadávat příkazy a zpracovávat výsledná data atd.