headerphoto

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

Design downloaded from Free Templates - your source for free web templates