Obsah lekce:
Při tvorbě WWW stránek často potřebujeme spravovat větší množství strukturovaných dat (např. zboží v internetovém obchodě, evidence knih v knihovně, ...). Nejvhodnějším způsobem, jak tyto data spravovat a organizovat, je jejich uložení do databáze. Jazyk PHP umožňuje komunikaci s celou řadou databází (např. Oracle, MySQL, ...), ale nejčastěji se dnes v této oblasti setkáme s databází MySQL. V této lekci se naučíme jak se s touto databází pomocí jazyka PHP spojit, abychom s ní mohli dále komunikovat.
Pro tuto lekci budeme potřebovat databázový server s databází. Použijeme stejnou databázi, jako v předchozích lekcích. Celou databázi si můžete stáhnout v souboru databaze.txt.
Prvním krokem, který musíme udělat, abychom mohli s databází komunikovat, je připojení k databázi. Pro připojení k databázi slouží funkce MySQL_Connect. Abychom mohli tuto funkci použít, potřebujeme znát 3 informace, které tabé budou vstupními parametry této funkce - adresa serveru, uživatelské jméno a heslo.
MySQL_Connect("server", "jmeno", "heslo");
Důležitou otázkou je, co doplnit za výše uvedené tři vstupní hodnoty. V našem případě bude server "localhost", jméno "root" a heslo "" (prázdný řetězec, neboli připojení bez hesla). Naše funkce tedy bude vypadat následovně:
MySQL_Connect("localhost", "root", "");
V případě, že budeme používat server s veřejným přístupem (tj. server, na kterém zveřejníme výsledné stránky), se tyto údaje budou lišit. Server "localhost" je použit pouze v případě, kdy je databáze umístěna na stejném serveru jako WWW stránky (na místě tohoto parametru může být IP adresa nebo doména serveru). Určitě se také budou lišit uživatelské jméno a heslo. Jméno "root" s prázdným heslem si můžeme dovolit na našem lokálním počítači, kam nemá nikdo přístup, ale zcela jistě je toto nastavení nevhodné pro server, na kterém je umístěna veřejně přístupná stránka. Kdokoliv by totiž získal jednodušše přístup ke všem datům databáze a mohl by do nich libovolně zasahovat.
Stejně jako jiné funkce, i funkce MySQL_Connect má svou návratovou hodnotu - tj. vrací nějaký výsledek. V našem případě bude výsledkem identifikátor spojení. Co se ale stane, když bude spojení neúspěšné? V tomto případě bude výsledkem volání funkce logická hodnota false. Abychom s tímto výsledkem mohli dále pracovat, uložíme si jej do proměnné. Náš kód bude po této úpravě vypadat následovně:
$spojeni = MySQL_Connect("localhost", "root", "");
Tato úprava však ještě není úplná. Máme sice uložený výsledek funkce, ale musíme jej ještě nějakým způsobem zpracovat. Zejména se jedná o ošetření situace, kdy se našemu PHP skriptu nepovede spojení s databázovým serverem (ať už z důvodu chybné adresy serveru, či z důvodu chybného uživatelského jména nebo hesla). V tomto případě je nutné, aby byla vypsána informace o chybě, a aby zpacování skriptu dále nepokračovalo. Pro tento účel nám poslouží funkce die (v doslovném překladu přikazuje našemu PHP skriptu "umři"). Tato funkce má jediný parametr - text, který se má zobrazit. Po zavolání této funkce se zobrazí zadaný text a vykonávání PHP skriptu je ukončeno. Náš skript upravíme do níže uvedené podoby.
$spojeni = MySQL_Connect("localhost","root",""); if (!$spojeni) { die('Could not connect: ' . mysql_error()); } else { echo 'Connected successfully'; }
Nyní si rozeberme, jak výše uvedený kód bude pracovat. Nejprve se funkce MySQL_Connect pokusí spojit s MySQL databází a výsledek této operace uloží do proměnné $spojeni (jak již bylo popsáno výše). Následne je tato hodnota předána podmínce if. V té je zpracována negace této proměnné, aby jako první bylo uvedeno zastavení skriptu ($spojeni ma hodnotu false - if zpracuje jeho negaci, tj. true). V tomto případě je provedeno zastavení skriptu pomocí funkce die. V parametru této funkce je však použita ještě jedna funkce - mysql_error(). Tato funkce vrací text chybové zprávy, kterou reagoval MySQL server na náš požadavek (tuto funkci využijeme i v budoucnu u dotazů).
Pokud $spojeni obsahuje identifikátor spojení, provede se větev else, v našem případě se zatím pouze vypíše text "Connected successfully"
.Než začneme pracovat s vlastními daty, je ještě nutné nastavit znakovou sadu pro komunikaci s databází (dle znakové sady, která je použita pro data v databázi). V případě naší databáze se jedná o znakovou sadu UTF8 (znakovým sadám jsou věnovány lekce Kódování textu 1 a Kódování textu 2). Pro nastavení znakové sady je nutné použít funkci mysql_query (která slouží pro volání SQL dotazu) s následující syntaxí:
mysql_query("SET CHARACTER SET utf8");
Výše uvedená funkce nastaví znakovou sadu na utf8. Pokud bychom chtěli použít jiné kódování, je možné místo utf8 použít například jednu z následujících hodnot:
Pokud bychom tento řádek v našem skriptu vynechali, mohlo by se použít chybné kódování (ve výchozím nastavení je většinou použito latin1), nezobrazovali by se správně například některé znaky s diakritikou, tak jako na níže uvedeném obrázku.
$spojeni = MySQL_Connect("localhost","root",""); if (!$spojeni) { die('Could not connect: ' . mysql_error()); } else { echo 'Connected successfully'; mysql_query("SET CHARACTER SET utf8"); }
Před tím, než zavoláme dotaz na některou z tabulek, je ještě nutné vybrat databázi, která bude použita. Pro výběr databáze slouží funkce mysql_select_db. Jediným parametrem této funkce je jméno databáze. Zápis funkce tedy bude vypadat následujícím způsobem:
mysql_select_db("jmeno");
Po implementaci do předchozího skriptu bude výsledek následující:
$spojeni = MySQL_Connect("localhost","root",""); if (!$spojeni) { die('Could not connect: ' . mysql_error()); } else { echo 'Connected successfully'; mysql_query("SET CHARACTER SET utf8"); mysql_select_db("renome"); zde může následovat například výběr dat z tabulky }