Image
15.5.2016 0 Comments

Databázy II / 3.časť

Späť na úvod >> Späť na seriál

Leto je pravdepodobne za nami a začal sa nový školský rok. Aj ja vás vítam v našej škole databáz, a keďže sme oddýchnutí, hneď sa pustíme do poriadnej práce. Dúfam, že sa inštalácie podarili a všetci máme všetko správne rozbehané. Tentoraz si ukážeme, ako „serverová trojka“ Apache + PHP + MySQL funguje v praxi.

Trocha teórie
My už vieme, že naša „serverová trojka“ beží spravidla na jednom počítači. Nie je to však nevyhnutnosť. Je možné vo zvláštnych prípadoch mať na jednom počítači Apache + PHP a na druhom zase MySQL. Mám to prakticky overené, ale zatiaľ som to v praxi nepotreboval. V takom prípade sa pozmenia trochu konfiguračné súbory a, samozrejme, aj PHP skripty.
Pre jednoduchosť budeme uvažovať, že „trojka“ beží na jednom počítači a klientska aplikácia na inom počítači. Je jedno, na akom operačnom systéme pobežíme, keďže ide o rovnaké princípy. Na prípadné odchýlky vás upozorním.
Nesmieme zabudnúť, že najdôležitejšie sú pre nás naše dáta. Jadrom celého systému naďalej zostáva MySQL server. To ostatné, Apache a PHP, je len technologické okolie, slúžiace na to, aby sme sa k našim dátam dostali. Na obr. č. 1 sú znázornené rôzne možné spôsoby, ako sa dá k dátam pristúpiť.

Vetva A opisuje najjednoduchší spôsob – priamy prístup pomocou tzv. front-end aplikácie od výrobcu SQL servera. Takou front-end aplikáciou je aj nám dobre známy monitor mysql. Touto cestou sme pracovali v predchádzajúcich lekciách a vieme, že je vhodná iba pre databázových administrátorov.
Vetva B opisuje prístup k datám pomocou HTTP servera. Používateľ sedí za HTTP klientom, čo môže byť ľubovoľný internetový prehliadač, tzv. browser, napr. Netscape Navigator, Opera, Internet Explorer, Mozilla a iné. Pomocou browsera posiela konkrétne požiadavky na dáta, tie HTTP server prijme, odovzdá PHP preprocesoru. Ten sa spojí s SQL serverom, získa požadované dáta, upraví do vhodnej podoby a cestou HTTP servera sa zobrazia na obrazovke klienta. Toto je veľmi vhodná cesta, lebo prístup k jednotlivým dátam je možný z ľubovoľného miesta na svete, kde je prijateľné spojenie a dostupný browser. Týmto spôsobom sa budeme zaoberať v niekoľkých lekciách.
Vetva C znázorňuje prístup k dátam, keď na klientskom počítači beží určitá natívna aplikácia. Tá môže byť napísaná vo vyššom programovacom jazyku (napr. Pascal, Delphi, C, Visual Basic a iné, ktoré umožňujú používať príkazy SQL). Dokonca to môže byť aj Excel, do ktorého si pritiahneme požadované dáta z SQL servera. Klientska aplikácia komunikuje s SQL serverom buď priamo, pomocou API funkcií daného SQL servera, alebo nepriamo, pomocou ODBC. Tento variant prístupu k dátam sa využíva pri tvorbe rôznych účtovných programov, kde sa riešia špecializované funkcie programu, ako tlač do formulárov a pod., ktoré nie je možné zabezpečiť cestou vetvy B. Aj my sa budeme trochu touto vetvou zaoberať a ukážeme si niekoľko príkladov.
Vráťme sa teraz k vetve B. Aby sme mohli písať PHP skripty, musíme ovládať syntax príkazov. Keďže v PC REVUE už bežal seriál o programovaní v PHP, nebudeme sa dopodrobna zaoberať jednotlivými príkazmi. My sa pozrieme podrobne na tie príkazy, ktoré spolupracujú s MySQL serverom.

PHP funkcie
PHP má bohatú škálu funkcií na komunikáciu s MySQL serverom. Je ich spolu 33, ale na základnú prácu nám postačí iba niekoľko z nich. Ich zoznam je uvedený v tabuľke.

Tabuľka: Základné funkcie PHP na spojenie s MySQL serverom

 

 

 

Názov

Zápis

Opis

MySQL_Connect

MySQL_Connect(, , )

Vytvorí spojenie s databázou

MySQL_Close

MySQL_Close()

Uzavrie spojenie s databázou

MySQL_Select_DB

MySQL_Select_DB(, )

Vytvorí spojenie s databázou

MySQL_Query

MySQL_Query(, )

Vykoná príkaz SQL

MySQL_Num_Rows

MySQL_Num_Rows()

Zistí počet záznamov výsledku

MySQL_Fetch_Array

MySQL_Fetch_Array()

Načíta jeden riadok výsledku do asociatívneho poľa

MySQL_Result

MySQL_Result(, , )

Získanie jednej položky výsledku dopytu

MySQL_Free_Result

MySQL_Free_Result()

Uvoľnenie výsledku z pamäte

MySQL_Affected_Rows

MySQL_Affected_Rows()

Vracia počet záznamov, ovplyvnených príkazom INSERT, UPDATE a DELETE

MySQL_Create_DB

MySQL_Create_DB(, )

Vytvorí novú databázu

MySQL_Drop_DB

MySQL_Drop_DB(, )

Zmaže databázu

V PHP je dobrým zvykom funkcie na spoluprácu s databázami pomenovávať podľa databázového stroja. Preto sa aj funkcie k MySQL začínajú slovom MySQL_. Za ním nasleduje meno funkcie.

Náš prvý skript
Je načase, aby sme pristúpili k tvorbe nášho prvého skriptu PHP. Jeho úloha bude veľmi jednoduchá. Po svojom zavolaní spočíta počet záznamov v tabuľke kniha v databáze KNIZNICA a tento počet vypíše na obrazovku browsera.

Vieme, že skripty PHP sa zapisujú medzi znaky a ?>. Ako prvé musíme nadviazať spojenie s MySQL serverom. Na to slúži funkcia MySQL_Connect. Formálny zápis vyzerá takto:
$spojenie = MySQL_Connect(, , );

Parametrami funkcie sú:
- – názov počítača, kde beží MySQL server, v tomto prípade “localhost“, pretože Apache spolu s PHP bežia na tom istom serveri ako MySQL
- – meno používateľa, ktorý sa do databázy pripája, napr. “root
- <heslo_používateľa> – heslo používateľa na prístup k databázam, v mojom prípade “heslo

Poznámka: Tento príklad je ilustračný a nerieši bezpečnosť siete. Preto si pre pochopenie dovolíme používať roota a jeho heslo.

Táto funkcia vracia číslo spojenia, pod ktorým beží. S týmto číslom, ktoré je uložené do premennej $spojenie (názov premennej si môžeme zvoliť), potom budeme operovať v ďalších príkazoch. Takže zápis na spojenie k nášnu SQL serveru bude:
$spojenie = MySQL_Connect(“localhost”, “root”, “heslo”);

Vieme, že každý PHP príkaz musí byť oddelený stredníkom – bodkočiarkou ( ; ).
Ak sa spojenie nepodarí, funkcia vratí hodnotu false. Neskôr si ukážeme, ako sa dá takéto chybové hlásenie ošetriť v náš prospech.
Keď už máme spojenie úspešne nadviazané, musíme určiť, do ktorej databázy chceme pristupovať. To dosiahneme funkciou MySQL_Select_DB. Ako názov naznačuje, funkcia vyselektuje zadanú databázu za aktívnu. Formálny zápis je:
MySQL_Select_DB(, );

Názov_databázy je jasný, v našom prípade KNIZNICA. Spojenie je číslo spojenia, ktoré vráti funkcia MySQL_Connect. V prípade, že uvažujeme iba s jedným spojením, môžeme tento parameter vynechať. Ak si nie sme istí, či môže nastať viac spojení, je dobré tento parameter použiť.

V našom prípade to bude:
MySQL_Select_DB(“kniznica”, $spojenie);

Nasleduje zadanie príkazu SQL. Na to slúži funkcia MySQL_Query. Formálny zápis je:
$vysledok = MySQL_Query(, );

Táto funkcia vykoná na danom spojení zadaný príkaz SQL nad práve aktívnou databázou a vráti identifikátor výsledku. Ak pri vykonávaní príkazu SQL dôjde k chybe, vráti funkcia hodnotu false. Ak parameter neuvedieme, použije sa posledné vytvorené spojenie. My chceme vykonať príkaz selekcie nad tabuľkou kniha:
$vysledok = MySQL_Query(“select * from kniha”, $spojenie);

Pozor na to, že MySQL server je case sensitive pri názvoch tabuliek, teda nie je jedno, či napíšeme kniha alebo KNIHA!
A keďže chceme zistiť počet záznamov v tabuľke kniha, použijeme funkciu:
$pocet = MySQL_Num_Rows();

Funkcia vráti do premennej $pocet počet záznamov, ktoré obsahuje výsledok. Pri chybe vráti hodnotu false. Náš prípad teda bude:
$pocet = MySQL_Num_Rows($výsledok);

Keď už máme všetko spočítané, chceme naše úsilie oznámiť žiadateľovi. Použijeme funkciu echo takto:
echo “V tabulke KNIHA je $pocet zaznamov”;

echo zabezpečí výpis reťazca, uvedeného v úvodzovkách. Ak je súčasťou reťazca aj premenná, vypíše sa jej obsah.

Poznámka: Keby sme reťazec uzavreli do apostrofov, a nie do úvodzoviek, vypíše sa reťazec tak, ako je napísaný, teda nie obsah premennej, ale jej meno.

Na záver každej operácie je slušnosťou spojenie uzavrieť. To dosiahneme funkciou:
MySQL_Close();

V našom prípade:
MySQL_Close($spojenie);

Ako teda bude vyzerať náš prvý skript? Pomenujeme ho priklad1.php a uvádzame ho na výpise.

$spojenie = MySQL_Connect("localhost","root","heslo");
MySQL_Select_Db("kniznica",$spojenie);
$vysledok = MySQL_Query("select * from kniha", $spojenie);
$pocet = MySQL_Num_Rows($vysledok);
echo "V tabulke KNIHA je $pocet zaznamov.";
MySQL_Close($spojenie);
?>

 

Skript treba napísať vo vhodnom editore, vytvárajúcom klasický ASCII text, teda nie vo Worde a podobne. V takom prípade by sa mohlo stať, že PHP preprocesor by nevedel správne interpretovať znaky, ktoré v súbore zanechal nevhodný editor, ale my ich na obrazovke nevidíme. Azda najvhodnejším editorom je Programer’s File Editor. Umožňuje napísané súbory previesť aj do unixovej formy, vytlačiť s číslovaním riadkov a podobne. Stiahnuť si ho môžete z mojej WWW stránky www.mior.host.sk.
Keď máme skript napísaný, uložíme ho na náš HTTP server. Môžeme ho uložiť priamo do adresára, uvedeného v DocumentRoot v súbore httpd.conf. Je vhodné vytvoriť nový adresár, napr. sql, a doň uložiť naše cvičné skripty. Spustíme vhodný prehliadač, zadáme adresu webového servera, cestu ku skriptu a názov skriptu, napr: http://web.doma.sk/sql/priklad1.php

Ak dostaneme niečo podobné ako na obr. č. 2, vidíme, že náš prvý skript v spojení s databázou funguje.

Náš druhý skript
Aký je počet záznamov v tabuľke kniha, to už vieme, ale my by sme chceli vypísať aj obsah tabuľky. Preto si teraz vytvoríme druhý skript, ktorý pomenujeme priklad2.php. Od neho budeme chcieť to, čo od prvého skriptu, ale navyše chceme, aby sa vypísal aj obsah stĺpcov nazov a autor z tabuľky kniha.
Už vieme, že výsledok dopytu SQL je uložený v premennej $vysledok. Na získanie potrebných údajov môžeme použiť viac funkcií, ale asi najvhodnejšia bude funkcia MySQL_Fetch_Array(), ktorá prečíta jeden záznam z premennej $vysledok a obsah jeho položiek uloží do asociatívneho poľa, ktoré si môžeme pomenovať $zaznam:
$zaznam = MySQL_Fetch_Array($vysledok);

Obsah každej položky záznamu je uložený do prvku, ktorý má názov rovnaký, ako je názov položky v tabuľke. To veľmi uľahčí prácu so záznamom. Potom sa funkcia posunie na ďalší záznam. Ak funkcia vráti všetky záznamy, vráti hodnotu false. Túto vlastnosť môžeme výhodne využiť v cykle načítavania takto:

                while ($zaznam = MySQL_Fetch_Array($vysledok))
                               echo $zaznam[“nazov”].” -- “.$zaznam[“autor”].”
\n”;

Čo je to za zvláštny zápis $zaznam[“nazov”]? To je práve získanie obsahu premennej $zaznam, ktorá zodpovedá stĺpcu s menom nazov v príslušnej tabuľke kniha. Obdobne získame obsah položky autor a pomocou echo to vypíšeme na obrazovku. Aby bol text lepšie čitateľný, vložili sme medzi obe polia dve čiarky s medzerami a na konci sme dali znak tvrdého zalomenia
s novým riadkom \n. Predpokladám, že spájanie reťazcov nám v PHP nerobí problémy, ale na zopakovanie pripomeniem, že sa to jednoducho robí pomocou bodky.

Ako teda bude vyzerať zápis skriptu priklad2.php? Tak ako na výpise:

                $pocet = MySQL_Num_Rows($vysledok);
                echo "V tabulke KNIHA je $pocet zaznamov.";
                echo "

";
                while ($zaznam = MySQL_Fetch_Array($vysledok))
                       echo $zaznam["nazov"]." -- ".$zaznam["autor"]."
\n";
                MySQL_Close($spojenie);        

?>

 

Ak vás zaujal zápis echo

, tak vedzte, že ide o vytvorenie nového odseku.

Skript uložíme, prekopírujeme na príslušné miesto vo webovom serveri a v prehliadači ho zavoláme takto: http://web.doma.sk/sql/priklad2.php           

Prehliadač sa spojí so serverom, ten vykoná príslušnú prácu a na obrazovke sa zobrazí obr. č. 3.

Všetky zdrojové texty nemusíte prácne odpisovať, ale si ich môžete stiahnúť z redakčnej webovej stránky www.pcrevue.sk alebo mojej web stránky na adrese www.mior.host.sk. Zároveň vás tam čaká niekoľko zaujímavých noviniek.
Nabudúce si naše nové poznatky trošku rozšírime.

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá