PHP a MySQL databáza
V minulom semestri sme si prebrali základy jazyka SQL a jeho použitie v systéme databázy MySQL. Takisto sme si troška priblížili prácu so systémom phpMyAdmin, pomocou ktorého vieme databázy v tomto systéme spravovať. Ako sme si povedali, databázový systém je v podstate server, ktorý beží na nejakej IP adrese, na porte a pre prístup k nemu potrebujeme vstupné meno a heslo. Prístupom v tomto zmysle myslíme možnosť nadviazania komunikácie, čiže zavolať nejaké query a následne aj dostať od servera odpoveď cez sieť.
Mať prístup zvonka do databázy je štandard, pretože s databázou sa nepracuje ručne a priamo cez jej systém (priamo na jej serveri), ako sme si to skúšali v minulom semestri. Databáza slúži predovšetkým ako vonkajšie a oddelené miesto, resp. úložisko dát. Ako sme už dávnejšie spomenuli, databázový model, čiže celkovo zoznam tabuliek a ich štruktúra, by mala byť navrhnutá predtým, ako sa začne na vývoji informačného systému pracovať. Samozrejme, nie je to nutnosť, v praxi sa aj tak následne počas vývoji na systéme dodatočne niečo v databáze mení.
Tieto operácie, čo sa týka databázového modelu, čiže vytvorenie databázy, tabuliek, stĺpcov a podobne, sa zvyknú vykonávať správcom databázy, priamo na nej, vo väčšine cez systém na správu, napr. ako phpMyAdmin. Nie je zvykom, že na tieto operácie existuje časť systému (webstránky), pomocou ktorého sa to vykonáva automaticky. Informačné systémy komunikujú s databázami vo väčšine len pomocou príkazou na načítanie, vloženie a úpravu dát. Ako sme už viackrát spomenuli, systémy zobrazujú, získavajú a editujú dáta od používateľa, takže k tomu slúžia aj adekvátne príkazy jazyka SQL.
Princíp je jednoduchý, predstavme si spravodajský portál, na ktorý sme sa dostali cez nejaký odkaz na konkrétny článok. Po načítaní stránky sa v systéme na základe toho, aký článok chceme zobraziť (unikátny názov článku alebo nejaké číslo ID), zavolá query na databázu, ktorý vytiahne (SELECT) dáta o danom článku (záznamu v tabuľke článkov). Táto query sa však zavolá priamo v kóde systému, v našom prípade webstránky a takisto dáta z query sa v procese načítavania stránky dostanú (budú vrátené funkciou na vykonanie query v DB) priamo do kódu. Tam sa príslušne spracujú a v správnej forme zobrazia používateľovi. Presne toto je typická ukážka práce s databázou.
Dosť ale bolo rečí, toto všetko si ideme v nasledujúcich prednáškach vyskúšať na našom systéme a na našej databáze. Predtým, ako začneme tvoriť na našej webstránke prvky, ktoré by mali následne vykonávať nejaké operácie nad databázou, potrebujeme s databázou nadviazať spojenie. V kóde jazyka PHP existuje viac spôsobov, ako komunikovať s databázou. My sa nimi ale nejdeme nateraz zbytočne zaťažovať...len aby sme vedeli, budeme používať systém MySQLi (písmenko i značí improved – vylepšený) procedurálnym spôsobom (existuje ešte MySQLi objektovo orientované, ale objektovo orientované programovanie si preberieme neskôr...).
Takže v podstate všetko, čo budeme potrebovať na komunikáciu s databázou, budeme vykonávať cez funkcie, ktoré obsahujú slovo mysqli a pomocou jej parametrov budeme nastavovať rôzne vlasnosti daného príkazu. Predtým, než budeme vykonávať akúkoľvek operáciu s DB (delete, update, select...), musíme s ňou mať nadviazané spojenie. Spojenie s databázou sa vytvára pomocou funkcie mysqli_connect (connect – pripojenie), ktorá si vyžaduje tri parametre. Prvý parameter je názov servera (url/ip adresa), druhým parametrom je prihlasovacie meno a tretím heslo. Pri našej databáze sme meno a heslo nemenili, defaultne po inštalácii programu MAMP by mali byť obidve hodnoty nastavené na ''root'' (root – akokeby všeobecné označenie pre admina – správcu – vlastníka).
Zavolanie tejto funkcie nám vráti odpoveď, či spojenie bolo alebo nebolo nadviazané, tým pádom si to vieme aj rovno otestovať, či bolo nadviazanie komunikácie úspešné. Otvorte si program Sublime, v ktorom sme písali kód projektu v minulom stupni štúdia a otvorte si súbor index.php nášho projektu 5-Projekt2. Táto podstránka našej webstránky je prázdna, tak to využijeme a do jej tela si skúsime napísať kód pre nadviazanie spojenia s databázou aj s výpisom výsledku. Kód by mohol vyzeraťa takto:
index.php (kód za nadpisom Domov):
<?php
$server_name = "localhost";
$user_name = "root";
$password = "root";
$connection = mysqli_connect($server_name, $user_name, $password);
if (!$connection) {
echo 'Spojenie s databázou sa nepodarilo nadviazať.';
}else{
echo 'Spojenie s databázou sa podarilo úspešne nadviazať.';
}
?>
Po načítaní stránky …/5-Projekt2/index.php by ste mali dostať správu o úspešnom nadviazaní. Skúste teraz naschvál zmeniť napríklad prihlasovacie heslo (hodnotu premennej password) na zlú, aby ste videli, že sa vypíše hláška o nedviazaní. Pri úspešnom spojení totižto funkcia mysqli_connect vracia nejaké dáta, to znamená, že nie je prázdna. Ak sa spojenie nenadviaže, nevráti nič, tým pádom podmienka !connection (negácia premennej connection) je splnená, pretože connection je prázdna (je akokeby FALSE a negácie z nej spraví TRUE, takže je splnená).
Ako vidíte, hodnoty pre pripojenie do databázy sme nezadali rovno ako parametre funkcie, ale najprv sme si ich vložili do premenných a tie použili ako parametre. Toto je dobrá praktika,pretože tieto premenné, resp. prihlasovacie údaje budeme potrebovať niekedy na viacerých miestach v kóde. Tieto údaje sa však môžu kedykoľvek zmeniť, napríklad sa presunie databázový server na inú IP adresu alebo sa zmení meno a heslo pre bezpečnosť a podobne. Tým pádom stačí tieto údaje zmeniť iba pri priradení do týchto premenných a problém vyriešený, nebude nutné hľadať v kóde, kde všade sme to zadali a meniť to.
Keď už sa nám podarilo úspešne nadviazať spojenie s databázou, nič nám nebráni v tom, aby sme vykonávali dotazy na ňu priamo z kódu našej webstránky. Ešte predtým si ale musíme prebrať jeden druh dát, konkrétne jeden typ dátového typu array.