MySQL a web: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 1: Riadok 1:
{{Skripta_dbs}} {{Draft}}  
+
{{Skripta_dbs}
V prípade, že už máme navrhnutú databázu, v ktorej sú už nejaké dáta je vhodné ju prepojiť s určitým informačným systémom. Každý informačný systém je pozostáva z databázového modelu, ktorý modeluje požadovanú časť reality. Aby sa dalo s týmto databázovým modelom ľahko pracovať (bez znalosti administrátorských nástrojov ako je napríklad phpMyAdmin<ref>phpMyAdmin http://www.phpmyadmin.net</ref> je potrebné vytvoriť používateľské rozhranie.
+
V prípade, že už máme navrhnutú databázu, v ktorej sú už nejaké dáta je vhodné ju prepojiť s určitým informačným systémom. Každý informačný systém je pozostáva z databázového modelu, ktorý modeluje požadovanú časť reality. Aby sa dalo s týmto databázovým modelom ľahko pracovať (bez znalosti administrátorských nástrojov ako je napríklad phpMyAdmin<ref>phpMyAdmin http://www.phpmyadmin.net</ref>) je potrebné vytvoriť používateľské rozhranie.
  
 
==Možnosti spojenia sa s databázou mySQL==
 
==Možnosti spojenia sa s databázou mySQL==
Riadok 8: Riadok 8:
 
===HTML - prezentácia výsledkov===
 
===HTML - prezentácia výsledkov===
 
Jazyk [[HTML_-_značkovací_jazyk|HTML]] je značkovací jazyk používaný pre tvorbu web stránok. Pri našej práci využijeme len základné schopnosti tohoto jazyka:
 
Jazyk [[HTML_-_značkovací_jazyk|HTML]] je značkovací jazyk používaný pre tvorbu web stránok. Pri našej práci využijeme len základné schopnosti tohoto jazyka:
*Použitie nadpisov, odstavcov
+
*použitie nadpisov, odstavcov,
*Pre zobrazenie databázových tabuliek použijeme tabuľkové zobrazenie.
+
*pre zobrazenie databázových tabuliek použijeme tabuľkové zobrazenie.
 
Prázdny HTML dokument môže vyzerať nasledujúco:
 
Prázdny HTML dokument môže vyzerať nasledujúco:
 
<source lang="html4strict">
 
<source lang="html4strict">
Riadok 27: Riadok 27:
 
Jazyk PHP je skriptovací jazyk, ktorý pracuje na strane servera. To znamená, že príkazy jazyka PHP už nie sú na web stránke, ktorá je zobrazená v internetovom priehliadači. Príkazy jazyka PHP sa píšu priamo do HTML kódu medzi značky <nowiki><?php</nowiki> a <nowiki>?></nowiki>.
 
Jazyk PHP je skriptovací jazyk, ktorý pracuje na strane servera. To znamená, že príkazy jazyka PHP už nie sú na web stránke, ktorá je zobrazená v internetovom priehliadači. Príkazy jazyka PHP sa píšu priamo do HTML kódu medzi značky <nowiki><?php</nowiki> a <nowiki>?></nowiki>.
  
 +
Ukážka použitia bloku PHP na web stránke.
 
<source lang="html4strict">
 
<source lang="html4strict">
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Riadok 48: Riadok 49:
 
</source>
 
</source>
 
kde
 
kde
*'''adresa_db_servera''' - je názov alebo IP adresa databázového servera MySQL.  
+
*''adresa_db_servera'' - je názov alebo IP adresa databázového servera MySQL.  
**V prípade, ak máte nainštalovaný databázový server na rovnakom počítači ako je webový server, tak adresa je 'localhost' (alebo IP adresa 127.0.0.1)
+
**V prípade, ak máte nainštalovaný databázový server na rovnakom počítači ako je webový server, tak adresa je 'localhost' (alebo IP adresa 127.0.0.1).
*'''meno_používateľa''' - používateľské meno, pre prihlásenie sa k databáze
+
*''meno_používateľa'' - používateľské meno, pre prihlásenie sa k databáze,
*'''heslo_používateľa''' - heslo pre prihlásenie sa k databáze
+
*''heslo_používateľa'' - heslo pre prihlásenie sa k databáze.
 
Funkcia ''mysql_connect'' nám vracia identifikátor spojenia, v ktorom sú informácie o spojení (pre naše potreby nezaujímavé).
 
Funkcia ''mysql_connect'' nám vracia identifikátor spojenia, v ktorom sú informácie o spojení (pre naše potreby nezaujímavé).
 
Použitie tejto funkcie:
 
Použitie tejto funkcie:
Riadok 61: Riadok 62:
 
?>
 
?>
 
</source>
 
</source>
Príkaz mysql_connect vytvorí spojenie. V prípade, ak sa nepodarilo nadviazať spojenie, vykoná sa druhá časť príkazu - die. ''Die'' je funkcia, ktorá okamžite ukončí vykonávanie skriptu. Ale ešte predtým, ako ukončí vykonávanie skriptu vypíše text, ktorý je uvedený v v parametri tejto funkcie.
+
Príkaz ''mysql_connect'' vytvorí spojenie. V prípade, ak sa nepodarilo nadviazať spojenie, vykoná sa druhá časť príkazu - ''die''. ''Die'' je funkcia, ktorá okamžite ukončí vykonávanie skriptu. Ale ešte predtým, ako ukončí vykonávanie skriptu vypíše text, ktorý je uvedený v v parametri tejto funkcie.
  
 
Funkcia ''mysql_close'' slúži na ukončenie spojenia s databázou. Parametrom je identifikátor spojenia.
 
Funkcia ''mysql_close'' slúži na ukončenie spojenia s databázou. Parametrom je identifikátor spojenia.
Riadok 73: Riadok 74:
 
</source>
 
</source>
 
kde:
 
kde:
*'''názov_databázy''' je názov databázy, tak ao je vytvorená na databázovo serveri
+
*''názov_databázy'' je názov databázy, tak ako je vytvorená na databázovo serveri,,
*'''identifikátor_spojenia''' je nepovinný v prípade, ak v PHP skripte máme len jedno databázové spojenia.
+
*''identifikátor_spojenia'' je nepovinný v prípade, ak v PHP skripte máme len jedno databázové spojenia.
  
V našom príklade doplníme výber databázy "student".
+
V našom príklade doplníme výber databázy ''student''.
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
 
     $link=mysql_connect("db.server","meno","heslo") or die("Chyba pri pokuse o nadviazanie spojenia");
 
     $link=mysql_connect("db.server","meno","heslo") or die("Chyba pri pokuse o nadviazanie spojenia");
     mysql_select_db("student", $link) or die("Požadovanú databázu s nepodarilo vybrať");
+
     mysql_select_db("student", $link) or die("Požadovanú databázu sa nepodarilo vybrať");
 
     // praca s databazou
 
     // praca s databazou
 
     mysql_close($link);
 
     mysql_close($link);
Riadok 87: Riadok 88:
 
====3. Nastavenie znakovej sady pre spojenie====
 
====3. Nastavenie znakovej sady pre spojenie====
 
Práca s rôznymi znakovými sadami môže byť (a je) komplikovaná. Je dobré, ak používame jednu znakovú sadu, aby sme sa vyhli s problémami s konvertovaním medzi znakovými sadami. Pri práci s databázami v prostredí webu existujú viaceré nastavenia znakových sád:
 
Práca s rôznymi znakovými sadami môže byť (a je) komplikovaná. Je dobré, ak používame jednu znakovú sadu, aby sme sa vyhli s problémami s konvertovaním medzi znakovými sadami. Pri práci s databázami v prostredí webu existujú viaceré nastavenia znakových sád:
*znaková sada použitá na ukladanie dát do tabuliek
+
*znaková sada použitá na ukladanie dát do tabuliek databázy,
*znaková sada použitá pre zobrazovanie údajov (znaková sada web stránky)
+
*znaková sada použitá pre zobrazovanie údajov (znaková sada web stránky),
 
*znaková sada pre spojenie s databázovým serverom.
 
*znaková sada pre spojenie s databázovým serverom.
 
Ak používame v databáze znakovú sadu utf-8, tak je dobré použiť tú istú znakovú sadu aj pre web stránku. Pre nastavenie znakovej sady pre spojenie existuje SQL príkaz ''SET NAMES''<ref>SET NAMES (mysql)http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html</ref>:
 
Ak používame v databáze znakovú sadu utf-8, tak je dobré použiť tú istú znakovú sadu aj pre web stránku. Pre nastavenie znakovej sady pre spojenie existuje SQL príkaz ''SET NAMES''<ref>SET NAMES (mysql)http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html</ref>:
Riadok 94: Riadok 95:
 
   SET NAMES 'charset_name'
 
   SET NAMES 'charset_name'
 
</source>
 
</source>
Do našej aplikácie pridáme tento SQL príkaz pomocou volania funkcie mysql_query, ktorá odošle na databázový server pripravený SQL príkaz. Syntax príkazu mysql_query je nasledovná:
+
Do našej aplikácie pridáme tento SQL príkaz pomocou volania funkcie ''mysql_query'', ktorá odošle na databázový server pripravený SQL príkaz. Syntax príkazu'' mysql_query'' je nasledovná:
 +
 
 
<source lang="php">
 
<source lang="php">
 
     mysql_query ( dotaz [, $identifikácor_spojenia] )
 
     mysql_query ( dotaz [, $identifikácor_spojenia] )
 
</source>
 
</source>
 
kde:
 
kde:
*''dotaz'' je SQL dotaz, ktorý chceme vykonať
+
*''dotaz'' je SQL dotaz, ktorý chceme vykonať,
*''identifikácor_spojenia'' (nepovinný parameter) je identifikátor spojenia získaný pomocou funkcie ''mysql_connect''.
+
*''identifikácor_spojenia'' (nepovinný parameter) je identifikátor spojenia získaný pomocou funkcie ''mysql_connect'',
 
*funkcia mysql_query vráti identifikátor výsledku, ktorý použijeme pre výber údajov, ktoré sú výsledkom SQL dotazu.
 
*funkcia mysql_query vráti identifikátor výsledku, ktorý použijeme pre výber údajov, ktoré sú výsledkom SQL dotazu.
Zdrojový kód rozšírime o riadok č. 4:
+
Zdrojový kód rozšírime o ďalší riadok:
 +
 
 
<source lang="php" line>
 
<source lang="php" line>
 
<?php
 
<?php
Riadok 113: Riadok 116:
 
</source>
 
</source>
 
====4. Odoslanie dotazu na databázu====
 
====4. Odoslanie dotazu na databázu====
Po vytvorení spojenia, vybratí konkrétnej databázy a nastavení vhodného kódovania môžeme na databázu poslať SQL dotaz, ktorý chceme vykonať. Slúži na to už spomínaná funkcia ''mysql_query''. Výhodnejšie je si pripraviť SQL dotaz a uložiť ho do jednej premennej (riadok 5 a 6):
+
Po vytvorení spojenia, vybratí konkrétnej databázy a nastavení vhodného kódovania môžeme na databázu poslať SQL dotaz, ktorý chceme vykonať. Slúži na to už spomínaná funkcia ''mysql_query''. Výhodnejšie je si pripraviť SQL dotaz a uložiť ho do jednej premennej (premenná ''$dotaz''):
 +
 
 
<source lang="php" line>
 
<source lang="php" line>
 
<?php
 
<?php
Riadok 126: Riadok 130:
 
</source>
 
</source>
 
====5. Načítanie výsledkov dotazu====
 
====5. Načítanie výsledkov dotazu====
Po zavolaní funkcie mysql_query máme v premennej ''$idVysledku'' identifikátor výsledku dotazu. Pomocou neho dokážeme výsledok z databázy prečítať. Pre správne načítanie výsledku budeme potrebovať nasledujúce funkcie:
+
Po zavolaní funkcie ''mysql_query'' máme v premennej ''$idVysledku'' identifikátor výsledku dotazu. Pomocou neho dokážeme výsledok z databázy prečítať. Pre správne načítanie výsledku budeme potrebovať nasledujúce funkcie:
 
Funkcia ''mysql_fetch_array''<ref>mysq_fetch_array http://www.php.net/manual/en/function.mysql-fetch-array.php</ref> vráti jeden riadok z množiny výsledkov. Ak je teda výsledkom dotazu tabuľka, ktorá má napríklad 10 záznamov, je potrebné túto funkciu zavolať 10x.
 
Funkcia ''mysql_fetch_array''<ref>mysq_fetch_array http://www.php.net/manual/en/function.mysql-fetch-array.php</ref> vráti jeden riadok z množiny výsledkov. Ak je teda výsledkom dotazu tabuľka, ktorá má napríklad 10 záznamov, je potrebné túto funkciu zavolať 10x.
Funkcia vráti pole, ktorého položkami sú hodnoty atribútov jedného záznamu výsledku.
+
Funkcia ''mysql_fetch_array'' vráti pole, ktorého položkami sú hodnoty atribútov jedného záznamu výsledku.
 
<source lang="php">
 
<source lang="php">
 
   mysql_fetch_array ( idVysledkuSQL_dotazu [typVysledku] )
 
   mysql_fetch_array ( idVysledkuSQL_dotazu [typVysledku] )
 
</source>
 
</source>
 
kde:
 
kde:
*''idVysledkuSQL_dotazu'' je identifikátor výsledku, ktorý získame pomocou funkcie ''mysql_query''
+
*''idVysledkuSQL_dotazu'' je identifikátor výsledku, ktorý získame pomocou funkcie ''mysql_query'',
 
*''typVysledku'' je symbolická konštanta, ktorá môže mať hodnoty MYSQL_NUM, MYSQL_ASSOC alebo MYSQL_BOTH. Predvolená hodnota je MYSQL_BOTH.
 
*''typVysledku'' je symbolická konštanta, ktorá môže mať hodnoty MYSQL_NUM, MYSQL_ASSOC alebo MYSQL_BOTH. Predvolená hodnota je MYSQL_BOTH.
**MYSQL_NUM - výsledky budú v tvare numerického poľa, teda poľa s indexmi 0, ... počet atribútov výsedku
+
**MYSQL_NUM - výsledky budú v tvare numerického poľa, teda poľa s indexmi 0, 1, ... počet atribútov výsedku,
**MYSQL_ASSOC - výsledky budú v tvare asociatívneho poľa, teda indexy budú názvy atribútov (napr: <nowiki>vysledok['CountryCode']</nowiki> )
+
**MYSQL_ASSOC - výsledky budú v tvare asociatívneho poľa, teda indexy budú názvy atribútov (napr: <nowiki>vysledok['CountryCode']</nowiki>),
**MYSQL_BOTH - výsledky budú v oboch formátoch
+
**MYSQL_BOTH - výsledky budú v oboch formátoch.
 
V nasledujúcom príklade bude spôsob, akým vyberieme jeden záznam z výsledku dotazu a vypíšeme všetky hodnoty atribútov:
 
V nasledujúcom príklade bude spôsob, akým vyberieme jeden záznam z výsledku dotazu a vypíšeme všetky hodnoty atribútov:
 +
 
<source lang="php" line>
 
<source lang="php" line>
 
   // v premennej data bude pole hotnot vsetkych atributov
 
   // v premennej data bude pole hotnot vsetkych atributov
Riadok 149: Riadok 154:
 
   echo $data["Population"];
 
   echo $data["Population"];
 
</source>
 
</source>
Keďže väčšinou nevieme, koľko je riadkov vo výsledku dotazu, budeme tieto výsledky vypisovať až pokým ich nevypíšeme všetky. Využijeme na to cyklus while:
+
Keďže väčšinou nevieme, koľko je riadkov vo výsledku dotazu, budeme tieto výsledky vypisovať až pokým ich nevypíšeme všetky. Využijeme na to cyklus ''while'':
 +
 
 
<source lang="php" line>
 
<source lang="php" line>
 
   // v premennej data bude pole hotnot vsetkych atributov
 
   // v premennej data bude pole hotnot vsetkych atributov
Riadok 170: Riadok 176:
 
  4081, Prievidza, SVK, Trenčiansky, 52070
 
  4081, Prievidza, SVK, Trenčiansky, 52070
  
Pomocou pripravenej funkcie ''zobraz_vysledok_dotazu'' ([[#Súbory na stiahnutie|Súbory na stiahnutie]]) môžeme zobraziť výsledok dotazu v tvare tabuľky:
+
Pomocou pripravenej funkcie ''zobraz_vysledok_dotazu'' ([[#Súbory na stiahnutie|pozri súbory na stiahnutie]]) môžeme zobraziť výsledok dotazu v tvare tabuľky:
 
Pomocná funkcia ''zobraz_vysledok_dotazu'' sa nachádza v súbore ''funkcie.php'' (pozri prílohu).
 
Pomocná funkcia ''zobraz_vysledok_dotazu'' sa nachádza v súbore ''funkcie.php'' (pozri prílohu).
  

Verzia zo dňa a času 22:58, 11. január 2011

{{Skripta_dbs} V prípade, že už máme navrhnutú databázu, v ktorej sú už nejaké dáta je vhodné ju prepojiť s určitým informačným systémom. Každý informačný systém je pozostáva z databázového modelu, ktorý modeluje požadovanú časť reality. Aby sa dalo s týmto databázovým modelom ľahko pracovať (bez znalosti administrátorských nástrojov ako je napríklad phpMyAdmin[1]) je potrebné vytvoriť používateľské rozhranie.

Možnosti spojenia sa s databázou mySQL

Pre databázový systém mySQL [2] existuje veľa spôsobov ako sa k databáze pripojiť. V našom kurze využijeme možnosť programovacieho jazyka php pre spojenie sa s databázou a jazyka HTML pre zobrazenie výsledkov.

HTML - prezentácia výsledkov

Jazyk HTML je značkovací jazyk používaný pre tvorbu web stránok. Pri našej práci využijeme len základné schopnosti tohoto jazyka:

  • použitie nadpisov, odstavcov,
  • pre zobrazenie databázových tabuliek použijeme tabuľkové zobrazenie.

Prázdny HTML dokument môže vyzerať nasledujúco:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">		
        <title>DBS - Databázové systémy</title>
    </head>     
    <body>
        Tu je obsah dokumentu. Teda to, čo sa zobrazí na web stránke.    
    </body>
</html>

php - nástroj pre prácu s databázou

Pre sprývnu funkcionalitu jazyka PHP je vhodné ak spolupracuje s nejakým webserverom (Apache[3], IIS[4], ...). Web server poskytuje služby zobraznia web stránok a jazyk PHP je časťou, ktorá dovoľuje vytvárať menšie či väčšie programy. Jazyk PHP je skriptovací jazyk, ktorý pracuje na strane servera. To znamená, že príkazy jazyka PHP už nie sú na web stránke, ktorá je zobrazená v internetovom priehliadači. Príkazy jazyka PHP sa píšu priamo do HTML kódu medzi značky <?php a ?>.

Ukážka použitia bloku PHP na web stránke.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">		
        <title>DBS - Databázové systémy</title>
    </head>     
    <body>
        Tu je obsah dokumentu. Teda to, čo sa zobrazí na web stránke.    
        <?php
            tu môžem písať príkazy jazyka php
        ?>
    </body>
</html>

1. Spojenie sa s databázou

Pre pripojenie k databázovému serveru MySQL slúži v PHP funkcia mysql_connect. Táto funkcia má zvyčajne 3 parametre:

    mysql_connect (adresa_db_servera, meno_používateľa, heslo_používateľa)

kde

  • adresa_db_servera - je názov alebo IP adresa databázového servera MySQL.
    • V prípade, ak máte nainštalovaný databázový server na rovnakom počítači ako je webový server, tak adresa je 'localhost' (alebo IP adresa 127.0.0.1).
  • meno_používateľa - používateľské meno, pre prihlásenie sa k databáze,
  • heslo_používateľa - heslo pre prihlásenie sa k databáze.

Funkcia mysql_connect nám vracia identifikátor spojenia, v ktorom sú informácie o spojení (pre naše potreby nezaujímavé). Použitie tejto funkcie:

<?php
    $link=mysql_connect("db.server","meno","heslo") or die("Chyba pri pokuse o nadviazanie spojenia");
    // praca s databazou
    mysql_close($link);
?>

Príkaz mysql_connect vytvorí spojenie. V prípade, ak sa nepodarilo nadviazať spojenie, vykoná sa druhá časť príkazu - die. Die je funkcia, ktorá okamžite ukončí vykonávanie skriptu. Ale ešte predtým, ako ukončí vykonávanie skriptu vypíše text, ktorý je uvedený v v parametri tejto funkcie.

Funkcia mysql_close slúži na ukončenie spojenia s databázou. Parametrom je identifikátor spojenia.

2. Výber databázy

Pre tým, ako začneme klásť dotazy na databázu musíme si vybrať s ktorou databázou chceme pracovať. V prvom kroku sme sa spojili s databázovým serverom, na ňom však zvyčajne existuje viacero databáz. Výber databázy robíme pomocou funkcie mysql_select_db.

Funkciu mysql_select_db je vhodné používať s dvoma parametrami:

   mysql_select_db(názov_databázy, identifikátor_spojenia);

kde:

  • názov_databázy je názov databázy, tak ako je vytvorená na databázovo serveri,,
  • identifikátor_spojenia je nepovinný v prípade, ak v PHP skripte máme len jedno databázové spojenia.

V našom príklade doplníme výber databázy student.

<?php
    $link=mysql_connect("db.server","meno","heslo") or die("Chyba pri pokuse o nadviazanie spojenia");
     mysql_select_db("student", $link) or die("Požadovanú databázu sa nepodarilo vybrať");
    // praca s databazou
    mysql_close($link);
?>

3. Nastavenie znakovej sady pre spojenie

Práca s rôznymi znakovými sadami môže byť (a je) komplikovaná. Je dobré, ak používame jednu znakovú sadu, aby sme sa vyhli s problémami s konvertovaním medzi znakovými sadami. Pri práci s databázami v prostredí webu existujú viaceré nastavenia znakových sád:

  • znaková sada použitá na ukladanie dát do tabuliek databázy,
  • znaková sada použitá pre zobrazovanie údajov (znaková sada web stránky),
  • znaková sada pre spojenie s databázovým serverom.

Ak používame v databáze znakovú sadu utf-8, tak je dobré použiť tú istú znakovú sadu aj pre web stránku. Pre nastavenie znakovej sady pre spojenie existuje SQL príkaz SET NAMES[5]:

  SET NAMES 'charset_name'

Do našej aplikácie pridáme tento SQL príkaz pomocou volania funkcie mysql_query, ktorá odošle na databázový server pripravený SQL príkaz. Syntax príkazu mysql_query je nasledovná:

    mysql_query ( dotaz [, $identifikácor_spojenia] )

kde:

  • dotaz je SQL dotaz, ktorý chceme vykonať,
  • identifikácor_spojenia (nepovinný parameter) je identifikátor spojenia získaný pomocou funkcie mysql_connect,
  • funkcia mysql_query vráti identifikátor výsledku, ktorý použijeme pre výber údajov, ktoré sú výsledkom SQL dotazu.

Zdrojový kód rozšírime o ďalší riadok:

1 <?php
2     $link=mysql_connect("db.server","meno","heslo") or die("Chyba pri pokuse o nadviazanie spojenia");
3      mysql_select_db("student", $link) or die("Požadovanú databázu s nepodarilo vybrať");
4      mysql_query("SET NAMES 'utf8'");
5     // praca s databazou
6     mysql_close($link);
7 ?>

4. Odoslanie dotazu na databázu

Po vytvorení spojenia, vybratí konkrétnej databázy a nastavení vhodného kódovania môžeme na databázu poslať SQL dotaz, ktorý chceme vykonať. Slúži na to už spomínaná funkcia mysql_query. Výhodnejšie je si pripraviť SQL dotaz a uložiť ho do jednej premennej (premenná $dotaz):

1 <?php
2      $link=mysql_connect("db.server","meno","heslo") or die("Chyba pri pokuse o nadviazanie spojenia");
3      mysql_select_db("student", $link) or die("Požadovanú databázu s nepodarilo vybrať");
4      mysql_query("SET NAMES 'utf8'");
5      $dotaz="SELECT * FROM city WHERE CountryCode = 'SVK' ";
6      $idVysledku = mysql_query($dotaz) or die ("pravdepodobne chybný  dotaz");
7     // praca s databazou
8     mysql_close($link);
9 ?>

5. Načítanie výsledkov dotazu

Po zavolaní funkcie mysql_query máme v premennej $idVysledku identifikátor výsledku dotazu. Pomocou neho dokážeme výsledok z databázy prečítať. Pre správne načítanie výsledku budeme potrebovať nasledujúce funkcie: Funkcia mysql_fetch_array[6] vráti jeden riadok z množiny výsledkov. Ak je teda výsledkom dotazu tabuľka, ktorá má napríklad 10 záznamov, je potrebné túto funkciu zavolať 10x. Funkcia mysql_fetch_array vráti pole, ktorého položkami sú hodnoty atribútov jedného záznamu výsledku.

   mysql_fetch_array ( idVysledkuSQL_dotazu [typVysledku] )

kde:

  • idVysledkuSQL_dotazu je identifikátor výsledku, ktorý získame pomocou funkcie mysql_query,
  • typVysledku je symbolická konštanta, ktorá môže mať hodnoty MYSQL_NUM, MYSQL_ASSOC alebo MYSQL_BOTH. Predvolená hodnota je MYSQL_BOTH.
    • MYSQL_NUM - výsledky budú v tvare numerického poľa, teda poľa s indexmi 0, 1, ... počet atribútov výsedku,
    • MYSQL_ASSOC - výsledky budú v tvare asociatívneho poľa, teda indexy budú názvy atribútov (napr: vysledok['CountryCode']),
    • MYSQL_BOTH - výsledky budú v oboch formátoch.

V nasledujúcom príklade bude spôsob, akým vyberieme jeden záznam z výsledku dotazu a vypíšeme všetky hodnoty atribútov:

1    // v premennej data bude pole hotnot vsetkych atributov
2    $data=mysql_fetch_array($idVysledku);
3    // vypis tychto hodnot
4    echo $data["ID"].", ";
5    echo $data["Name"].", ";
6    echo $data["CountryCode"].", ";
7    echo $data["District"].", ";
8    echo $data["Population"];

Keďže väčšinou nevieme, koľko je riadkov vo výsledku dotazu, budeme tieto výsledky vypisovať až pokým ich nevypíšeme všetky. Využijeme na to cyklus while:

 1    // v premennej data bude pole hotnot vsetkych atributov
 2    while ($data=mysql_fetch_array($idVysledku))
 3    {
 4       // vypis tychto hodnot
 5       echo $data["ID"].", ";
 6       echo $data["Name"].", ";
 7       echo $data["CountryCode"].", ";
 8       echo $data["District"].", ";
 9       echo $data["Population"];	
10       echo "<br/>"; // HTML znacka pre novy riadok   
11    }

Výsledkom bude:

3210, Košice, SVK, Východné Slovensko, 242874
3211, Prešov, SVK, Východné Slovensko, 94977
3209, Bratislava, SVK, Bratislava, 432061
4080, Trenčín, SVK, Trenčiansky, 56215
4081, Prievidza, SVK, Trenčiansky, 52070

Pomocou pripravenej funkcie zobraz_vysledok_dotazu (pozri súbory na stiahnutie) môžeme zobraziť výsledok dotazu v tvare tabuľky: Pomocná funkcia zobraz_vysledok_dotazu sa nachádza v súbore funkcie.php (pozri prílohu).

Výsledok po použití funkcie zobraz_vysledok_dotazu()

Celý zdrojový kód pre prácu s databázou:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">		
        <title>DBS - Databázové systémy</title>
    </head>     
    <body>
      <?php
       $link=mysql_connect("db.server","meno","heslo") or die("Chyba pri pokuse o nadviazanie spojenia");
       mysql_select_db("student", $link) or die("Požadovanú databázu s nepodarilo vybrať");
       mysql_query("SET NAMES 'utf8'");
       $dotaz="SELECT * FROM city WHERE CountryCode = 'SVK' ";
       $idVysledku = mysql_query($dotaz) or die ("pravdepodobne chybný  dotaz");
       echo "<p class='dotaz'>";
       echo $sql;
       echo "</p>";
       zobraz_vysledok_dotazu($idVysledku);
       mysql_close($link);
      ?>
    </body>
</html>

Poznámka: Obsah funkcie zobraz_vysledok_dotazu je nasledovný:

<?php
function zobraz_vysledok_dotazu($res)
{
	// zistenie, kolko je vo vysledku stlpcov
    $field = mysql_num_fields( $res );   
    for ( $i = 0; $i < $field; $i++ ) {
		//nazvy stlpcov si ulozime do pola $names
        $names[] = mysql_field_name($res, $i);   
    }
	// informativny vypis o pocte riaadkov vysledku
	echo "<p>";
	echo "Počet riadkov: ".mysql_num_rows($res);
	echo "</p>";
	//vysoledok bude formatovany v tabulke
	echo "<table border='1'>";
	//hlavicka tabulky
	echo "<tr class='tabulka_hlavicka'>";
	for ( $i = 0; $i < $field; $i++ )
	{	//pocet hlaviciek sme si zistili v riaku c. 5
		echo "<th>".$names[$i]."</th>";
	}
	echo "</tr>";	
	//data tabulky
	//prikazom mysql_fetch_array vyberieme jeden (dalsi) zaznam vysledku dotazu
	//ak uz dalsi zaznam neexistuje funkcia vrati prazdnu hodnotu a cyklus sa zastavi
	while($data=mysql_fetch_array($res,MYSQL_NUM))
	{	
		// zaciatok riadka
		echo "<tr>";
		//v kazdom riadku bude tolko buniek, kolko je stlpcov vo vysledku
		for ( $i = 0; $i < $field; $i++ )
		{	
			//v premennej $data su vysledky dotazu pre jeden riadok
			echo "<td>".$data[$i]."</td>";
		}
		// koniec riadka
		echo "</tr>";
	}
	// koniec tabulky
	echo "</table>";
}
?>

Súbory na stiahnutie

  1. http://subory.fmtnuni.sk/ki_files/databazy/dbs1.zip
    • index.php - súbor obsahujúci samotnú HTML stránku (bez príkazov jazyka PHP)
    • funkcie.php - súbor s pomocnými funkciami pre uľahčenie práce
    • dbs_styl.css - súbor s definíciou zobrazenia HTML stránky

Zdroje a odkazy