V minulé lekci jsme se naučili založit a spravovat databázi a její tabulky, ale samotná databáze by k ničemu nebyla, pokud bychom nemohli její data zobrazit nebo doplnit pomocí scriptu například hodnotami z formulářů. Pro spolupráci MySQL s PHP budeme potřebovat příkazy jazyka SQL, ze kterých jsme si některé základní také uváděli.

MySQL a PHP

Abychom mohli databázi zpracovat pomocí PHP, musíme se nejprve připojit k databázovému serveru a vybrat databázi. První úkol vykoná funkce mysql_connect, která v případě úspěšného spojení vrátí jeho identifikátor ("ukazatel", podobně jako u otvírání souborů), pokud ke spojení nedojde, vrátí hodnotu false. Funkce má tři parametry - jméno počítače (případně s portem), jméno uživatele a heslo, například:
$link=mysql_connect("localhost","root","") or die ("databázový server není připojen");
Do proměnné $link se uložil jakoby odkaz na databázový server (identifikátor), databáze je uložena na serveru localhost, jako uživatel je uveden root bez hesla. Jestliže bude spojení neúspěšné, vrátí funkce mysql_connect hodnotu false a vykoná se příkaz die, který vypíše hlášení uvedené v závorce a ukončí překlad scriptu.
Jiná možnost, jak zabránit zobrazení případných chybových hlášek je využití znaku (direktivy) @ (potom je ale potřeba zkontrolovat, jestli ke spojení došlo (existuje proměnná $link)):
@$link=mysql_connect("localhost","root","");
Před skončením práce by se mělo spojení s databázovým serverem ukončit, aby se uvolnila paměť:
mysql_close($link); , pokud by se neuvedl parametr (identifikátor spojení), ukončilo by se poslední otevřené spojení.

Z předešlé lekce víte, že na jednom databázovém serveru může být více databází, druhým úkolem bude proto vybrat databázi příkazem mysql_select_db, jehož parametry jsou název databáze a identifikátor spojení (v případě jednoho otevřeného spojení se uvádět nemusí), v kombinaci s příkazem die například:
$db=mysql_select_db("petr",$link) or die("databaze nebyla otevřena");

Po úspěšném výběru databáze můžeme databázovému serveru klást dotazy - vkládat, upravovat či číst data z tabulek pomocí funkce mysql_query, jejímž parametrem jsou příkazy SQL a identifikátor spojení (při jednom spojení opět není povinný), například:
$dotaz="select * from knihy";
$result=mysql_query($dotaz,$link) or die ("dotaz neprosel");
$num=mysql_num_rows($result);
echo"vraceno ".$num." zaznamu";
mysql_free_result($result);

V uvedeném příkladě je použitá také funkce mysql_num_rows, která zjistí počet řádků (záznamů) načtené tabulky a funkce mysql_free_result, která v paměti smaže výsledek dotazu (uvolní paměť). Hodnotou funkce mysql_query je opět identifikátor (tentokrát výsledku dotazu), který je v příkladě uložený do proměnné $result.

Pro vypsání hodnot výsledku dotazu se nejčastěji používá funkce mysql_fetch_array, která postupně načítá jednotlivé záznamy do pole, jehož indexy jsou právě názvy vlastností (sloupců) databázové tabulky. Pokud už není ke čtení další záznam, je hodnotou této funkce false, výpis záznamů databázové tabulky do tabulky v prohlížeči by mohl vypadat takto:
echo "<table>";
while ($row=mysql_fetch_array($result))
echo "<tr><td>".$row["nazev"]."</td><td>".$row["autor"]."</td><td>".$row["popis"]."</td></tr>";
echo "</table>";
V cyklu se načítají do pole $row záznamy (řádky) tabulky knihy (viz dotaz výše), které mají vlastnosti nazev, autor, popis, prvky pole mají právě tyto indexy. Dokud jsou v tabulce záznamy, vypisují se jedním příkazem echo tagy pro řádek a buňky tabulky (<tr> , <td>) a načtené údaje (vše spojené tečkami do jednoho řetězce).

Při svých pokusech jsem narazil na problémy s naším rodným jazykem :-) . Pokud tvoříte www stránky podle našich lekcí a využíváte Windows, potom máte v hlavičce stránky v metatagu pro nastavení češtiny nejspíš znakovou sadu windows-1250:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
Pro správné zobrazení diakritiky je potom potřeba nastavit stejnou znakovou sadu i pro načítanou databazi SQL příkazem set names. Samozřejmě byste mohli zvolit i jinou sadu, ale měla by být stejná u stránky jako u databáze:
mysql_query("set names 'cp1250'");


Úkoly:

Úkol (2 body)

Ve své databázi založte další tabulku s názvem knihy (navrhněte si vlastnosti) a vložte do ní alespoň dva záznamy (s diakritikou). Pomocí PHP scriptu vypište tabulku s vloženými knihami.

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_20_10A_PHP20
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.