V předcházejících lekcích jsme k ukládání menšího množství dat používali datový soubor. Například u prvního počítadla jsme ukládali jediné číslo (počet návštěv), u návštěvní knihy jsme ukládali jen dva řetězce (jméno, zpráva). Pokud budeme chtít (jakože budeme :-) ) ukládat větší množství údajů a také je složitěji zpracovávat, potom by práce se souborem byla hodně nešikovná - složitá, zdlouhavá a nepraktická. U počítadla bychom mohli chtít třeba zjišťovat kolikrát se přistoupilo z které adresy, mohli bychom chtít výpis návštěv podle času a jiné údaje (nejspíš znáte ze složitějších počítadel), u návštěvní knihy bychom mohli chtít, aby k zápisům bylo možné přidávat komentáře atd. atd. A to je řeč jen o našich jednoduchých příkladech z minulých lekcí, což teprve, pokud byste programovali (za velké peníze:-) (ale až po dalším studiu :-) ) ) složité aplikace jako e-shopy, firemní databáze zaměstnanců, odběratelů, publikační portály atd., atd., atd. - nezbývá, než se pustit do databází :-)

Úvod do databází

Databázi chápeme jako úložiště dat uložených a zpracovávaných nezávisle na aplikačních programech. Databáze obsahují nejen data, ale také vztahy mezi jednotlivými objekty, schemata popisující strukturu dat, práva jednotlivých uživatelů databáze apod. Pro hledání v databázi se využívají příkazy jazyka SQL, které zpracovává a vykonává databázový server. Databázových serverů existuje řada, od komerčních (i velmi drahých - Oracle, Sybase, MS SQL apod.) po jednodušší, ale šířené zdarma, jako je například MySQL, který použijeme. V PHP potom můžeme vytvořit aplikaci (např. e-shop), ve které lze data v databázi zpracovávat (prohlížet, upravovat) prostřednictvím internetového prohlížeče.
Data jsou v databázi uspořádaná do tabulek, každá tabulka zahrnuje určitý soubor dat, firma může využívat například tabulku zaměstnanců, tabulku zákazníků, výrobků apod. Každá tabulka se skládá z řádků (záznamů) a sloupců (položky, atributy, jednotlivé vlastnosti), řádky by mohly obsahovat například jednotlivé zaměstnance, zatímco ve sloupcích by mohly být jejich jména, věky, platy apod. Jednou z vlastností musí být vždy nějaký identifikátor (osobní číslo zaměstnance, kód výrobku), který umožní jednoznačně odlišit jednotlivé položky (primární klíč).
Jednotlivé tabulky v databázi mohou být provázané, například tabulka zákazníků může obsahovat odkazy na tabulku zboží nebo obráceně.

Základní příkazy SQL

V první lekci jsme si nainstalovali databázový server MySQL. Nejprve vyzkoušíme práci s MySQL prostřednictvím příkazového řádku (konzole), to je ale velmi nepraktické, proto použijeme později i jiný nástroj.
Z příkazového řáku (Start - Spustit) můžeme spustit MySQL příkazem C:\dev\prog\mysql50\bin\mysql -u root -p. Prvním parametrem je účet root, což je jméno uživatele, které jsme použili při instalaci, druhý parametr je heslo (prázdné - viz návod k instalaci), dalším parametrem by mohlo být jméno či IP "hostujícího" počítače. Po spuštění bude MySQL vyžadovat heslo, pokud jsme ho při instalaci nezadali, stačí "odentrovat".
Pokud chceme vypsat nějaké hodnoty, můžeme použít příkaz SELECT, je jedno jestli budeme psát velká nebo malá písmena, příkazy se oddělují středníkem, například SELECT user(); vypíše uživatele databáze, SELECT version(); .vypíše verzi MySQL (a také počty řádků příslušných tabulek). Vyzkoušejte také všechny následující příkazy (pro listování mezi použitými příkazy konzole můžete použít kurzorové šipky):
show databases; - výpis názvů databází (po instalaci obsahuje naše MySQL tři databáze, mezi nimi databázi test)
use test; - "vstup" do databáze s názvem test
show tables; - výpis názvů tabulek v aktuální databázi
quit; (nebo exit;) - ukončení konzole
create database pokus; - vytvoření nové databáze s názvem pokus
drop database pokus; - smazání databáze s názvem pokus

Pro vytvoření tabulky v aktuální databázi slouží příkaz CREATE TABLE název, za kterým jsou v závorkách uvedené názvy vlastností (sloupců) spolu s typy jejich hodnot a parametrem null, který určuje, zda může být tato položka prázdná, například (rozdělení na řádky nemá na příkaz vliv):
create table knihy (
nazev varchar(100) not null,
autor varchar(100) not null,
popis text
);
Takto bude vytvořena tabulka s názvem knihy, ve které by všechny položky - knihy (v řádcích databáze) měly obsahovat tři vlastnosti (sloupce) - název, autora a popis. Parametr not null znamená, že položka nemůže být prázdná a typ položky se podobá například typům proměnných v PHP. Nejpoužívanější typy položek jsou:
int - celé číslo (zhruba od -2000000000 do 2000000000)
float - reálné číslo
char(50) - textový řetězec dané délky (maximálně 255 znaků)
varchar(50) - textový řetězec o maximální dané délce (maximálně 255 znaků)
datetime - datum a čas ve formátu RRRR-MM-DD HH:MM:SS
date - datum ve formátu RRRR-MM-DD
time - čas ve formátu HH:MM:SS
blob - speciální typ pro uložení binárních dat

Informace o definici tabulky si můžete nechat vypsat příkazem describe název;, pro naši konkrétní ukázku
describe knihy;.

Podobně jako databázi můžete smazat tabulku příkazem drop, například drop table knihy;.

Pozorný čtenář možná postřehl, že v definici tabulky knihy chybí právě ten jednoznačný identifikátor, který by každá tabulka měla obsahovat, protože tímto primárním klíčem nemůže být ani název ani autor (mohlo by se stát, že dvě různé knihy budou mít stejný název, natož autora). Pro úpravu tabulky lze použít příkaz alter table, přidat položku s názvem id můžeme takto (příkaz nemusí být napsaný na jednom řádku):
alter table knihy add id int auto_increment not null primary key;
Všimněte si, že typ tohoto identifikátoru je int a kromě parametru not null přibyly ještě auto_increment - automatické zvětšování o jedničku a primary key - stanovení primárního klíče.

Pro smazání položky tabulky se použije opět příkaz drop:
alter table knihy drop id; - smazání položky s názvem id

Pokud máme nadefinovanou tabulku, můžeme začít vkládat data příkazem insert into:
insert into knihy values('Egyptan Sinuhet', 'Mika Waltari', ' Roman ze starovekeho Egypta',1); - zkrácený zápis všech položek
insert into knihy (nazev, autor, popis) values ("PHP", "Jiří Kosek", "Tvorba interaktivních stránek"); - zápis vybraných položek (id je automaticky zvětšeno - viz jeho nastavení výše), nemůžete ovšem vynechat položky s atributem not null (pokud nemají nějakou default hodnotu)

Pro další práci s daty v tabulce můžete použít příkazy s klauzulí where, za kterou mohou být různé logické podmínky případně i spojené známými logickými spojkami:
delete from knihy where nazev="PHP"; - smazání záznamu, který má název PHP
delete from knihy where nazev like "Slun%"; - smazání záznamů, jejichž názvy začínají znaky Slun
delete from zamestnanci where plat>50000; - smazání zaměstnanců s velkým platem :-)
update knihy set nazev="PHP tvorba stranek" where nazev="PHP"; - oprava položky nazev(změna názvu PHP na delší)
update zamestnanci set plat=plat+5000 where plat<20000; - navýšení platu všem, kdo ho mají malý :-)
replace knihy (nazev, autor, popis, id) values ("Slunecni loterie",Philip K. Dick", sci-fi, 6); - buď vloží nebo přepíše záznam s id=6

K prohlížení (výpisu) položek záznamů uložených v tabulce (nebo více tabulkách) slouží příkaz select, případně s klauzulemi from, where, order by, group by, having. Zatím si uvedeme jen jednodušší příklady pro naši tabulku knihy:
select * from knihy; - vypíše všechny položky záznamů
select nazev, autor from knihy; - vypíše jen vybrané položky záznamů (název a autora)
select nazev from knihy where autor="Čapek"; - vypíše názvy Čapkových knih v tabulce knihy
select nazev, autor from knihy order by nazev; - vypíše názvy a autory seřazené podle názvů knih
select nazev, autor from knihy where nazev like "P%" or autor like "M%"; - vypíše názvy a autory knih, jejichž názvy začínají písmenem P nebo pokud jméno autora začíná písmenem M

Pokud jste se poctivě "prokousávali" předcházejícími řádky, zabralo vám psaní příkazů asi dost času (i když možná píšete rychleji než já :-) ). Spravovat databázi pomocí příkazového řádku by zabralo hodně času, proto se podíváme na způsob ve kterém několikaminutové psaní příkazu nahradíme několikerým kliknutím.

"Vizuální" správa databáze

Práci s konzolí MySQL jsme zkoušeli víceméně proto, abychom si osvojili základní příkazy jazyka SQL, pro skutečnou správu databází používají programátoři jiné softwarové nástroje, s PHP se nejčastěji používá aplikace PHPMyAdmin. My vyzkoušíme jednodušší nástroj, který nám zatím bude postačovat a který je výhodný malou velikostí, také se nemusí ani instalovat ani nijak nastavovat. Jmenuje se PHPMinAdmin a jeho autorem je J. Vrána, jeden z českých "guru" PHP (http://php.vrana.cz), aplikace je napsaná v PHP, takže může navíc posloužit ke studiu. "Zabalený" soubor si můžete stáhnou zde , stačí jej prostě rozbalit do některé z našich používaných složek (např. C:/dev/www) a potom v prohlížeči otevřít.


Od samotného přihlášení vám nejspíš nebude činit problémy žádná z operací, kterou jsme prováděli v minulém odstavci, tzn. založení, výběr nebo smazání databáze, vytvoření a úpravy tabulek, výpis definice tabulek nebo výpis záznamů, to vše v intuitivním prostředí bez nutnosti vypisování příkazů SQL, i když i tuto možnost máte také.



Ten, kdo z předchozího textu vstřebal základní znalosti o databázích, nebude potřebovat k používání aplikace PHPMinAdmin žádný návod, jako obvykle stačí otevřené oči a hlava :-). Jen pro jedince se slabším zrakem nebo jiným handicapem přidávám několik obrázků :-) .






Úkoly:

Úkol (2 body)

Založte novou databázi, jejíž název bude vaše příjmení. V této databázi vytvořte tabulku pocitadlo pro zaznamenání doby návštěvy, navštívené stránky a IP adresy návštěvníka. Vložte do této tabulky nějaké dva cvičné záznamy.

Název školy:Základní škola, Hradec Králové, M. Horákové 258
Název projektu:EU peníze školám
Číslo projektu:CZ.1.07/1.4.00/21.2575
Téma:Programování v PHP
Název:VY_32_INOVACE_19_10A_PHP19
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.