V dnešním, závěrečném dílu si probereme nejdůležitější funkce PHP, které nám umožní spolupracovat se SQL serverem.
V příkladech budeme používat příkazy pro práci s PostgreSQL. Aby nebyli ochuzeni ani ti, kdo si PHP zkoušejí pod Windows, uvedeme vždy i alternativu v MySQL.
Pracovat budeme s tabulkou z minulého dílu. Tabulka lidi v databázi db1 má tuto strukturu:
Jmeno prijmeni rod_cislo
a obsahuje tyto 3 řádky dat:
Petr |
Novák |
7510055838 |
Pavel |
Nový |
6412041234 |
Jirka |
Nováček |
5508125066 |
Prvním krokem by mělo být připojení k databázi.
$spojeni=Pg_Connect("dbname=db1 user=pepa password=Xpepa12");
nebo pro MySQL:
$spojeni=MySQL_Connect("mysql.server.cz", "pepa", "Xpepa12");
Všimněte si rozdílů: u PgSQL se přímo při připojení zadává jméno databáze, u MYSQL se připojujete pouze k počítači, jméno konkrétní databáze se použije až při vlastním SQL dotazu.
Do proměnné $spojeni (je typu integer) se uloží číslo spojení, na které se dále ve skriptech odvoláváme.
Parametrů při připojování k PgSQL může být více, záleží na konkrétní situaci (lze zadat číslo portu, tty, host, ...)
Nyní můžeme přikročit k vlastnímu dotazu:
$vysledek=Pg_Exec($spojeni,"SELECT * FROM lidi");
nebo pro MySQL:
$vysledek=MySQL_DB_Query("db1","SELECT * FROM lidi",$spojeni);
Tady jsou jasně vidět rozdíly v syntaxi, osobně mi ale syntaxe PgSQL připadá použitelnější.
Do proměnné $vysledek (typu integer) se uloží identifikátor výsledku, na který se odvoláváme při jeho dalším zpracování.
Nyní potřebujeme zjistit, kolik záznamů nám bylo vráceno:
$pocetzaznamu=Pg_NumRows($vysledek);
nebo pro MySQL:
$pocetzaznamu=MySQL_Num_Rows($vysledek);
Pokud by tabulka lidi obsahovala přesně data uvedená na začátku, dostali bychom číslo 3.
Nyní již můžeme získaná data vypsat do stránky:
echo "<table><tr><td>JMÉNO</td><td>PŘÍJMENÍ</td><td>RČ</td></tr>";
for ($pom=0; $pom<$pocetzaznamu; $pom++):
$zaznam=Pg_Fetch_Row($vysledek, $pom);
$jmeno=$zaznam[0];
$prijmeni=$zaznam[1];
$rc=$zaznam[2];
echo "<tr><td>$jmeno</td>";
echo "<td>$prijmeni</td>";
echo "<td>$rc</td></tr>";
endfor;
echo "</table>";
Každý záznam vrácený na dotaz má své "pořadové" číslo. Pomocí něj je pak možno se dopídit konkrétních dat:
$zaznam=Pg_Fetch_Row($vysledek, $pom);
Tato funkce uloží do pole $zaznam jednotlivé údaje, přes indexy jsme pak schopni uložit údaje do proměnných.
U MySQL by se skript musel trošku upravit:
while ($zaznam=MySQL_Fetch_Row($vysledek)):
$jmeno=$zaznam[0];
$prijmeni=$zaznam[1];
$rc=$zaznam[2];
echo "<tr><td>$jmeno</td>";
echo "<td>$prijmeni</td>";
echo "<td>$rc</td></tr>";
endwhile;
Jak je vidět, funkce
MySQL_Fetch_Row() pracuje trochu odlišně: má pouze jeden parametr (při přečtení jednoho záznamu dochází k inkrementaci indexu automaticky). Pokud chceme pracovat s konkrétním záznamem z výsledku, musíme použít funkci MySQL_Data_Seek($vysledek, $cislozaznamu);
Následné volání funkce MySQL_Fetch_Row() pak přečte konkrétně tento záznam.
Výsledná tabulka by pak vypadala takto:
JMÉNO |
PŘÍJMENÍ |
RČ |
Petr |
Novák |
7510055838 |
Pavel |
Nový |
6412041234 |
Jirka |
Nováček |
5508125066 |
Jak sami vidíte, základní práce s databázemi v PHP opravdu není nic složitého.
V tomto jednoduchém příkladu jsme ale uvedli pouze malou část dostupných funkcí. Jejich plný výčet s komentářem najdete buď v manuálech, nebo v knize pana Koska o PHP (lze koupit v knihkupectvích nebo na www.vltava.cz). Tato na dnešní dobu aktuální publikace rozebírá práci s PHP do hloubky, obsahuje mnoho konkrétních příkladů, je psána srozumitelně i pro začátečníka a hlavně obsahuje referenční přehled funkcí. Vřele doporučuji.