IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

6. diel - Založenie databázy a prístupy k nej v PHP

V minulej lekcii, Kontaktný formulár , sme vytvorili kontaktný formulár. Myšlienku MVC sme si už osvojili a mali by sme sa pohnúť smerom dopredu. V dnešnom dieli založíme databázu pre užívateľov a ich články.

Databázy

V nasledujúcich niekoľkých odsekoch si vytvoríme databázu v nástroji phpMyAdmin. Ak preferujete SQL alebo používate iný nástroj, bude na konci uvedený aj kompletné zakladací kód, ktorý stačí len spustiť.

Prejdite do PHPMyAdmin a vytvorte si nejakú novú databázu, ja si ju pomenoval mvc_db. Nezabudnite nastaviť porovnávanie na utf8_czech_ci.

Vytvorenie databázy v phpMyAdmin - Jednoduchý redakčný systém v PHP objektovo (MVC)

Databázu si otvoríte. Teraz si vytvoríme tabuľky, budú len dve.

Užívatelia

Vytvorte si novú tabuľku uzivatele. Bude mať spolu 4 stĺpce (polia):

  • uzivatele_id - typ int - primárny kľúč, autoincrement
  • jmeno - typ varchar - dĺžka 255
  • heslo - typ varcha - dĺžka 255
  • admin - typ int, predvolené: 0 (vyberte možnosť "Podľa zadania" a potom zadajte 0, viď obrázok nižšie)

Stĺpec admin určuje či je používateľ administrátor (0/1).

Naklikaná tabuľka by mala vyzerať takto:

Vytvorenie tabuľky užívateľov v phpMyAdmin - Jednoduchý redakčný systém v PHP objektovo (MVC)

(Nezabudnite na primárny kľúč a AI u polia uzivatele_id. Na screenshotu to nie je vidieť.)

Potvrdíme tlačidlom Uložiť.

Hotové tabuľke naklikne kľúč UNIQUE na stĺpec jmeno. To aby v nej nemohli byť 2 užívatelia s rovnakým menom:

Unikátny kľúč v phpMyAdmin - Jednoduchý redakčný systém v PHP objektovo (MVC)

Články

Pridáme ešte tabuľku clanky. Tá bude obsahovať 6 stĺpcov (polí).

  • clanky_id - typ int - primárny kľúč, autoincrement
  • titulok - typ varchar - dĺžka 255
  • obsah - typ text
  • url - varchar - dĺžka 255
  • popis - varchar - dĺžka 255
  • klicova_slova - varchar - dĺžka 255

Naklikaná tabuľka:

Vytvorenie tabuľky článkov v phpMyAdmin - Jednoduchý redakčný systém v PHP objektovo (MVC)

(Opäť nezabudnite na primárny kľúč a autoinkrementácie u polia clanky_id)

Stĺpec URL je url adresa, cez ktorú budeme k článku pristupovať. Napr. pre článok s titulkom "Úvodná článok" by URL mohlo vypísať ako "uvodni-clanek". Niektoré systémy články zobrazujú len podľa číselného ID, čo je však nepríjemné ako pre užívateľov, tak pre vyhľadávače. Uložíme.

Medzi články si vložíme ten úvodný, aby sme mali systém na čom testovať:

Úvodný článok do MVC redakčného systému v PHP - Jednoduchý redakčný systém v PHP objektovo (MVC)

Ak preferujete radšej SQL, databázu spolu s tabuľkami založíte nasledujúcim skriptom:

CREATE DATABASE IF NOT EXISTS mvc_db
DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci;

USE mvc_db;

CREATE TABLE IF NOT EXISTS clanky (
  clanky_id int(11) AUTO_INCREMENT,
  titulek varchar(255),
  obsah text,
  url varchar(255),
  popisek varchar(255),
  klicova_slova varchar(255),
  PRIMARY KEY (clanky_id)
);

CREATE TABLE IF NOT EXISTS uzivatele (
  uzivatele_id int(11) AUTO_INCREMENT,
  jmeno varchar(255),
  heslo varchar(255),
  admin int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (uzivatele_id)
);

ALTER TABLE uzivatele ADD UNIQUE (jmeno);

INSERT INTO  clanky (
    clanky_id,
    titulek,
    obsah,
    url,
    popisek,
    klicova_slova
)
VALUES (
NULL ,  'Úvod',  '<p>Vítejte na našem webu!</p>

<p>Tento web je postaven na <strong>jednoduchém MVC frameworku v PHP</strong>. Toto je úvodní článek, načtený z databáze.</p>', 'uvod',  'Úvodní článek na webu v MVC v PHP',  'úvod, mvc, web'
);

Než sa pustíme do práce s databázou v PHP, spomenieme si na to trochu teórie.

Prístupy pre prácu s databázou v PHP

Objektový svet a svet relačných databáz (svet relačná) sú veľmi rozdielne. Jedná sa o 2 odlišné filozofie, o ktorých si tu trúfam vyhlásiť, že sú nezlučiteľné.

Relačné databázy sú overený spôsob ako pracovať s dátami. I keď existujú aj databázy plne objektovej, firmám sa do nich teraz neoplatí investovať peniaze a preto sa zatiaľ nepresadili. Po revolúcii v programovaní a príchode objektov samozrejme nastal problém s ukladaním dát, keďže relačné databázy objektovo nefungujú a objekty ukladať nevie. Existuje niekoľko možností, ako sa s týmto vysporiadať.

1. neobjektové programovanie

Prvou možnosťou je samozrejme programovať úplne bez objektov. Tým by sme však išli proti prúdu, nemohli by sme používať žiadne komponenty 3. strán a náš kód by bol veľmi nekvalitné. Bol by problém vôbec vytvoriť aplikáciu nejakú architektúru. Určite tu teraz nemá zmysel vysvetľovať prínosy OOP, záujemcov odkazy na článok Objektovo orientované programovanie a evolúcie vývoja softvéru.

2. CRUD Wrapper

Prístup tzv. Wrapper nám umožňuje s databázou pracovať ako s objektom, však komunikujeme s ňou stále v jej jazyku SQL. Miešame teda objektový a relačná kód. Prístup je akýmsi kompromisom a vyžaduje filozofiu OOP trochu ohnúť. Výhodou je zachovanie výkonu a schopností databázy za cenu miernej degradácie myšlienok OOP.

Dáta z databázy vidíme najčastejšie ako hodnoty v poli a prichádzame o možnosť prideliť entitám nejakú funkcionalitu. Tú namiesto toho združujeme do tzv. Manažérov. Možno aj čiastočne mapovať dáta na existujúce triedy, však plnohodnotného konceptu objektového modelu nedosiahneme.

Databázové wrappery sa často píšu ako tzv. CRUD, sú teda predpripravené pre vykonávanie 4 základných databázových operácií (Create, Read, Update, Delete).

3. Objektovo relačné mapovanie

Objektovo relačné mapovanie (ORM) ide ortodoxne za myšlienkou OOP. Z databázy teda miesto pole hodnôt dostávame rovno objekty a tie na sebe majú metódy. V jazyku SQL vôbec nekomunikujeme, tabuľky v databáze vidíme ako kolekcia objektov, s ktorými môžeme pracovať bežnými prostriedkami jazyka. Sme vlastne úplne odtienené od toho, že pracujeme s relačné databáz. Znie to skvele, že?

Háčik je samozrejme v tom, že na pozadí dochádza k určitej degradácii výkonu databázy, otázky sa generujú automaticky a sú často neefektívne. Ďalším problémom ORM je, že je veľmi zložité. Musíme siahnuť po hotovom riešenie, ktoré PHP ako také neobsahuje a je potrebné použiť nejaké riešenie 3. strany, ktoré často nie je jednoduché vôbec sprevádzkovať, nieto používať.

Názory na ORM sú veľmi kontroverzné, niekto hovorí, že je to moderný spôsob práce s dátami a že písať otázky v SQL je zastarané. Niekto zas, že už samotná myšlienka ORM je nesprávna, pretože generovaný SQL kód skrátka nemôže byť efektívna a je nutné pomýšľať na jeho konečnú podobu, odtienenie teda nie je úplné. Osobne mám k ORM neutrálny postoj a ak mi niekto spolu s jazykom poskytne štandardizované a odladené ORM, rád ho použijem. Keďže PHP nič také neposkytuje, vyhýbam sa mu. Nepríde mi totiž, že je jeho pridaná hodnota taká vysoká, aby sa s ním tu oplatilo zaťažovať.

4. Objektové databázy

Okrem databáz relačných existujú aj už spomínané databázy objektové. Tie rieši problém nezlučiteľnosti objektového a relačného prístupu. Poskytujú rovnaký komfort, ako ORM, ale vnútorne netreba dáta prevádzať do tabuliek, ukladajú sa rovno ako objekty. Teoreticky neexistuje výkonnostný ani iný dôvod, prečo by nemali nahradiť databázy relačnej. V praxi sa ale bohužiaľ takmer nepoužívajú a môžeme len dúfať, že sa to časom zmení. Záujemcovia sa môžu pozrieť napr. Na projekt MongoDB.

My budeme využívať 2. prístupu - Wrapper, ktorý sa hodí do seriálu, kde tvoríme minimalistický a zároveň prehľadný kód. Nabudúce, v lekcii Databázový wrapper , si ho vytvoríme.


 

Predchádzajúci článok
Kontaktný formulár
Všetky články v sekcii
Jednoduchý redakčný systém v PHP objektovo (MVC)
Preskočiť článok
(neodporúčame)
Databázový wrapper
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity