Anglická verze
logolink

< Zpět na seznam lekcí

Spojení PHP a MySQL

PHPObsah lekce:

  • Funkce pro připojení k MySQL databázi a její parametry
  • Nastavení znakové sady

PHP a MySQL

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.

Připojení k databázi

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.

Obecný zápis funkce mysql_connect
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ě:

Funkce mysql_connect na lokálním serveru
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ě:

Funkce mysql_connect na lokálním serveru
$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.

Ošetření chyby při připojování k databázovému serveru
$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"

.
Možné výsledky volání MySQL_Connect z výše uvedeného příkladu

Nastavení znakové sady

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í:

Nastavení znakové sady
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:

  • utf8
  • cp1250
  • latin1
  • latin2
  • ...

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.

Výsledek nastavení znakové sady
Kompletní skript rozšířený o nastavení znakové sady
$spojeni = MySQL_Connect("localhost","root","");
               
if (!$spojeni) 
{
	die('Could not connect: ' . mysql_error());
}
else
{
	echo 'Connected successfully';
	mysql_query("SET CHARACTER SET utf8");
}

Výběr databáze

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:

Výběr databáze
mysql_select_db("jmeno");

Po implementaci do předchozího skriptu bude výsledek následující:

Kompletní skript pro připojení k MySQL databázi
$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
}

Další čtení

Odkazy

Otázky

  1. K čemu slouží funkce MySQL_Connect a jaké má parametry?
  2. K čemu slouží příkaz SET CHARACTER SET a proč je dúležité jeho použití při připojení k databázi?
webdesign, xhtml, css, php - Mgr. Michal Mikláš