Podpora databází v PHP
PHP podporuje několik databázových systémů. I když k práci s každým z nich slouží jiné funkce, jejich použití i jména jsou velice podobná. Obecně můžeme říci, že funkce pro práci s určitým SŘBD začínají jeho názvem. PHP tak obsahuje funkce začínající na MySQL_, které slouží pro práci s MySQL, funkce začínající na Pg_, které slouží pro práci s PostgreSQL, funkce začínající na Ifx_ slouží k práci s Informixem a mohli bychom pokračovat dál a dál. Pokud to snad ještě někdo nepochopil, připomínám, že funkce pro práci s ODBC začínají na ODBC_. Práce s databázemi je v PHP velice jednoduchá. Nejprve se musíme připojit k SQL-serveru. K tomu obvykle slouží funkce pojmenovaná xxx_Connect(). Po připojení k serveru můžeme zadávat SQL-příkazy. Nejčastěji k tomu slouží funkce xxx_Exec() nebo xxx_Query(). Získaný výsledek můžeme číst funkcemi xxx_Fetch_Row() a xxx_Result(). Těchto pár funkcí nám při práci s databází obvykle stačí.
Práci s PostgreSQL musíme zahájit připojením k serveru pomocí funkce Pg_Connect(). Parametrem funkce je jméno počítače a databáze, ke které se připojujeme. Výsledkem funkce je číslo, které identifikuje připojení k serveru a můžeme jej použít v dalších funkcích. Pokud se nepodaří připojit k PostgreSQL, vrací funkce Pg_Connect() hodnotu false
Typické schéma práce s PostgreSQL v PHP tedy vypadá takto:
<?php $spojeni=Pg_Connect("host=localhost user=x4b_bilko password=830423 dbname=db_4b" ); práce s databází pg_Close($spojeni)?>
$spojeni je proměnná, která identifikuje spojení vytvořené se serverem.
Pg_Exec() nebo Pg_query()
Vykonání SQL-příkazů - parametry jsou číslo spojení a dotaz zapsaný v jazyce SQL. Funkce vrací identifikátor výsledku, kterým se na získaná data odvoláváme v dalších funkcích. SQL-příkazy SELECT, INSERT, UPDATE, DELETE,CREATE, DROP….. pokud při prováděníSQL-příkazu dojde k chybě - vrací false
Pro výběr všech údajů z tabulky Zamestnanci můžeme použít:
$vysledk=Pg_Exec($spojeni,"SELECT * FROM Zamestnanci ORDER BYJmeno"); Proměnná $vysledek nyní obsahuje identifikátor výsledku. Pomocí něj můžeme číst jednotlivé záznamy výsledku a zjišťovat spoustu dalších věcí.
Přidání nového záznamu do tabulky
Předpokládejme, že v proměnných $jmeno, $prijmeni, $email a $narozen máme uloženy informace o člověku, kterého chceme do adresáře přidat. Do proměnných se údaje mohly dostat například z formuláře, který vyplnil uživatel. Stránka, která tento formulář obsluhuje, pak bude obsahovat tento kód pro přidání nového záznamu do tabulky:
<?php $spojeni=Pg_Connect("host=localhost user=x4b_bilko password=830423 dbname=db_4b" ); $result = pg_exec($spojeni, "insert into adresar (jmeno, prijmeni,email,narozen )values ('$jmeno', '$prijmeni', '$email', '$narozen')"); if ($result) echo "Do adresáře byl úspěšně přidán nový záznam."; else echo " Nový záznam se do adresáře nepodařilo přidat."; pg_Close($spojeni); ?>
Zrušení záznámu v tabulce
Předpokládejme, že identifikační číslo záznamu, který chceme smazat, máme uloženo v proměnné $id. Vymazání pak v PHP provedeme takto:
<?php $spojeni=Pg_Connect("host=localhost user=x4b_bilko password=830423 dbname=db_4b" ); $result = pg_exec($spojeni ,"delete from adresar where id=$id"); if ($result) echo "Záznam se podařilo úspěšně vymazat."; else echo "Záznam nelze vymazat"; pg_Close($spojeni); ?>
Změna záznámu v tabulce
Předpokládejme, že u člověka, jehož $id známe, chceme změnit e-mailovou adresu na hodnotu proměnné $email:
<?php $spojeni=Pg_Connect("host=localhost user=x4b_bilko password=830423 dbname=db_4b" ); $result = pg_exec("update adresar set email='$email' where id=$id"); if ($result) echo "Záznam se podařilo úspěšně aktualizovat."; else echo "Záznam nelze aktualizovat."; pg_Close($spojeni); ?>
Pg_NumRows() zjistí počet záznamů výsledku.
echo "V Tabulce Adresář je".Pg_NumRows($vysledk)."zánamů";
Výpis záznamů z tabulky
Pro čtení jednotlivých záznamů výsledku můžeme použít několik funkcí.
Pg_Fetch_Array() - přečte jeden záznam výsledku a obsah jeho položek uloží do asociativního pole. Funkci jako parametr musíme předat číslo záznamu, který chceme přečíst. Záznamy jsou číslovány od nuly.
K zobrazení osobních čísel a jmen všech zaměstnanců můžeme použít následující
include("spojeni.php"); $vyber=pg_exec("select * from adresar "); for($i=0;$i<pg_numrows($vyber);$i++) { $zaznam=pg_fetch_array($vyber,$i); $jmeno=$zaznam["jmeno"]; $prijmeni=$zaznam["prijmeni "]; $id=$zaznam["id"]; $narozen=$zaznam["narozen"]; $email =$zaznam["email"]; echo " $id, $jmeno,$prijmeni ,$narozen, $email <br>"; }
Pg_Fetch_Row() Načte záznam výsledku do pole
Pg_Fetch_Row(integer <vysledek>, integer <čislo zaznamu>) Funkce načte jeden záznam <vysledku> do pole. Obsah každé položky je uložen do jednoho prvku pole. Položky jsou ukládány postupně počínaje indexem 0. Pokud při čtení záznamu dojde k chybě (např. již nejsou žádné další záznamy k přečtení), vrací funkce alse. Záznamy jsou číslovány od nuly.
Pg_Result () Přečtení jedné položky výsledku
Pg_Result(integer <vysledek>, integer <čislo zaznamu>, mixed <položka>) Funkce vrací obsah položky <vysledku>. Položka je určena číslem záznamu (začí- nající od nuly) a číslem (opět číslováno od nuly) nebo jménem položky. V případě chyby vrací funkce false.
Používání této funkce, zejména na větší výsledky, je poměrně pomalé. Mnohem rychlejší je využití funkcí Pg_Fetch_Row(),Pg_Fetch_Array() a Pg_Fetch_Object(), které načítají celý záznam najednou
<?php include("spojeni.php"); $result = pg_exec("select * from adresar"); $pocet = pg_NumRows($result); echo "V tabulce adresar je $pocet záznamů."; $i = 0; while ($i<$pocet){ pg_Result($result, $i, "jmeno") . " " . pg_Result($result, $i, "prijmeni") . ", " . pg_Result($result, $i, "email") . ", " . pg_Result($result, $i, "narozen")."
"; $i++; } pg_Close($spojeni); ?>
Pg_Close($spojeni) Ukončení spojení s PostgreSQL