PHP, díl 6. – spolupráce se SQL servery

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:

Jmeno prijmeni rod_cislo
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.

Diskuze (3) Další článek: Co když to nebude fungovat?

Témata článku: Software, PHP, Programování, Servery, Celý sloupec, Like, Spolupráce, Výsledné dílo, Sloupec, Jedinečný parametr, From, Struktura, Alter, SQL, Díl, Petr, Novák, Select


Určitě si přečtěte

10 mýtů a polopravd o bateriích, kterým možná ještě věříte

10 mýtů a polopravd o bateriích, kterým možná ještě věříte

** Kolem baterií a akumulátorů koluje řada mýtů, nepravd a polopravd ** Dnes vám devět z nich zkusíme vyvrátit na základě faktů ** Většina z nich totiž neplatí pro moderní lithiové baterie

Karel Kilián, David Polesný | 99

Starý smartphone nemusí skončit v koši. 10 způsobů, jak ho ještě můžete využít

Starý smartphone nemusí skončit v koši. 10 způsobů, jak ho ještě můžete využít

** Co dělat s vysloužilým chytrým telefonem? Neházejte ho do koše! ** Našli jsme pro vás deset možností, jak ho prakticky využít ** I stará zařízení tak mohou být užitečná

Karel Kilián | 48

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

** S cenou do 20 tisíc lze vybrat solidní notebook na práci i hry ** Přenosné notebooky nabídnou i kovová těla a rychlý hardware ** Na hraní se hodí více peněz, ale na použitelný základ dvacet tisíc stačí

Tomáš Holčík, David Polesný | 47


Aktuální číslo časopisu Computer

Megatest: 20 powerbank s USB-C

Test: mobily do 3 500 Kč

Radíme s výběrem routeru

Tipy na nejlepší vánoční dárky