komunikace s databází v php

Profi programátoři používají pro komunikaci s databází samozřejmě výhradně objektově orientované příkazy. Já však nejsem „profi“ programátor, protože nemám už tolik času hrát si s kódem, takže musím jít cestou nejrychlejší a sice procedurální. Čas jsou peníze. Rychlá orientace v kódu umožňuje ušetřit hodně času. V následujícím příspěvku se pokusím shrnout nejpoužívanější příkazy pro komunikaci s databází tím nejjednodušším možným způsobem – tedy procedurálně.

Tvoříte-li mega weby s desítkami tisíc uživatelů denně, potom však raději používejte objektově orientované příkazy – jsou méně náročné na výkon serveru.

Připojení k databázi

Údaje pro připojení můžete nadefinovat takto:
define("DB_HOST", "url.vasehosuperhostingu.cz");

Povšimněte si, že je samozřejmostí používat mysqli_connect namísto mysql_connect. i značí improved a používá se vlastně již docela dost roků.

Databázové dotazy

mysqli_query()

První předávaný parametr této funkce je odkaz na databázi, druhým parametrem předáváme SQL příkaz. Pokud provádíme například jen UPDATE nebo smazání DELETE záznamu, žádný další příkaz nepotřebujeme spouštět. Avšak chceme-li získat data, musíme zpracovat návratové hodnoty, tzv. result set. K tomu slouží řada funkcí. Osobně nejčastěji používám mysqli_fetch_assoc().

mysqli_fetch_assoc()

Funkce vrací asociativní pole, tzn. v našem případě $row.
Jednotlivé prvky pole jsou asociovány s názvy sloupců v dané tabulce. V SQL příkazu SELECT jsme vybrali všechny sloupce zástupným znakem *. Stačí tedy vědět jaké jsou názvy sloupců a můžeme s nimi přímo pracovat jejich uvedením v hranaté závorce $row[‚id‘], $row[‚nazev‘], apod.

 

mysqli_fetch_row()

Někdy se může hodit načítání pomocí číselných indexů, zvláště chceme-li vykázat více hodin času stráveného kódováním (just kidding) anebo třeba pro načtení jednoho řádku.

mysqli_fetch_array()

Tato funkce ideální pro ty, kdo používají často jak číselné indexy, tak i spojení slovní.
$row[0] obsahuje stejnou hodnotu jako $row[‚id‘] – jde o ekvivalentní výrazy. Pokud byste chtěli vynutit používání pouze číselných indexů nebo slovních asociací, můžete tak učinit následujícím způsobem. V praxi jsem se však nesetkal s nutností něco takového činit.

mysqli_fetch_array($res, MYSQLI_NUM);//pracuje pouze s indexy
mysqli_fetch_array($res, MYSQLI_ASSOC);  // pracuje pouze s názvy sloupců
Jak už možná tušíte, první z výše uvedených příkazů je ekvivalentní příkazu mysli_fetch_row a druhý příkazu mysqli_fetch_assoc.
Standardně se data ukládají do pole tak jako v předchozím případě (viz mysqli_fetch_row)

anebo je lze příkazem list() načíst rovnou do proměnných

mysqli_affected_rows()

Tímto příkazem zjistíme počet ovlivněných řádků přechozím dotazem na databázi.

mysqli_num_rows()

Potřebujeme-li zjistit kolik záznamů vyhovilo dotazu, používá se většinou právě tato funkce.

mysqli_free_result()

Nebudete-li tento příkaz používat, zdánlivě se nic neděje. Avšak čím více dotazů probíhá při jednom načtení stránky, tím vyšší je potom zatížení serveru. Neuvolníte-li vždy result set tímto příkazem, může dojít k viditelnému zpomalení načítání stránek už při několika desítkách simultálně klikajících uživatelů.