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 mysqli_, které slouží pro práci s MySQL, funkce začínající na mysqli_, 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čí.

V PHP máme tři základní možnosti přístupu k databázi MySQL:

  • Rozšíření PHP MySQL - základní rozšíření umožňující práci s MySQL. Doporučuje se ho používat pouze do verze MySQL 4.1.3. I když je funkční i u novějších verzí, neumožňuje využití nových možností MySQL.
  • PHP Data Objects (PDO) - abstraktní vrstva pro komunikaci s databázemi. Umožňuje konzistentní přístup ke všem podporovaným databázím.
  • Rozšíření PHP MySQLi (MySQL Improved) - rozšíření vyvinuté pro MySQL 4.1.3 a novější. Umožňuje přístup k novým funkcím. Součástí PHP je od verze 5. MySQLi podporuje jak objektově orientovaný, tak i procedurální styl programování.

Rozšíření MySQL se v současné době nedoporučuje používat, protože není efektivní. Pro nové projekty je vhodné využít MySQLi nebo PDO.

Práci s MySQL musíme zahájit připojením k serveru pomocí funkce mysqli_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 MySQL, vrací funkce mysqli_Connect() hodnotu false

V PHP se k MySQL databázi můžete připojit pomocí funkce mysqli_connect(). Jejími parametry jsou název hostitele, uživatelské jméno a heslo. Po připojení k MySQL si ještě musíte vybrat svoji databázi, což se děje příkazem mysqli_select_db.

<?php 
$spojeni=mysqli_connect("localhost", "uzivatel", "heslo","databáze" );
mysqli_set_charset($spojeni, "utf8");
mysqli_select_db("mojedb");    
//mysqli_select_db() nemusíme použít, pokud databázi nastavíme ve funkci mysqli_connect()
   
//práce s databází např. výpis, editace, ...
 
mysqli_Close($spojeni)?>

$spojeni je proměnná, která identifikuje spojení vytvořené se serverem.

mysqli_Close($spojeni) Ukončení spojení s MySQL

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

$vysledek=mysqli_query($spojeni,"SELECT * FROM Zamestnanci ORDER BY Jmeno"); 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=mysqli_Connect("localhost", "user","password", "dbname" );
 $result = mysqli_query($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.";
 mysqli_Close($spojeni);
?> 

Zrušení záznamu 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=mysqli_Connect("localhost", "user","password", "dbname" );
$result = mysqli_query ($spojeni,"delete from adresar where id=$id");
    if ($result)
        echo "Záznam se podařilo úspěšně vymazat.";
    else
        echo "Záznam nelze vymazat";
   mysqli_Close($spojeni);
?>    

Změna záznamu 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=mysqli_Connect($spojeni,"localhost", "user","password", "dbname" );
    $result = mysqli_query($spojeni,"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.";
    mysqli_Close($spojeni);
?>    

Výpis záznamů z tabulky

mysqli_Num_Rows() zjistí počet záznamů výsledku (nejčastěji určí počet řádků z tabulky pro příkaz SELECT)

echo "V Tabulce Adresář je".mysqli_Num_Rows($vysledek)."záznamů";

Pro čtení jednotlivých záznamů výsledku můžeme použít několik funkcí.
mysqli_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.

mysqli_Fetch_Row() Načte záznam výsledku do pole

mysqli_Fetch_Row(vysledek) Funkce načte jeden záznam výsledku (jeden řádek tabulky). 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 false.

<?php
include("spojeni.php");
$vyber=mysqli_query($spojeni,"select * from adresar ");
for($i=0;$i<mysqli_num_rows($vyber);$i++) {
    $zaznam=mysqli_fetch_array($vyber);
    $id=$zaznam["id"];
    //nebo  $id=$zaznam[0];  
    $jmeno=$zaznam["jmeno"]; 
    $prijmeni=$zaznam["prijmeni "];
    $narozen=$zaznam["narozen"];
    $email =$zaznam["email"];
    echo " $id, $jmeno,$prijmeni ,$narozen, $email <br>";
    mysqli_Close($spojeni);
  }
  ?>  
Design downloaded from Free Templates - your source for free web templates