Ako na MySQL: časť druhá

Rasťo Turek  /  24. 02. 2004, 00:00

Dnes sa pozrieme ako vyťahovať dáta z databáze a teda ako zozbierané údaje vypíšeme do stránky, samozrejme z pohľadu php. Je jasné, že si dnes preberieme len základné techniky, aby som začiatočníkov úplne nezmagoril a aby ma zas tí skúsenejší neohovorili hneď po prvých riadkoch.

Niečo viac o dátach v mysql
Dáta, ako sme si už povedali minule, sú uložené v tabuľkách, ktorým priradíme akési pravidlá, podľa ktorých sú nasledovne ukladané. Ako si však dáta z databáze „vytiahnuť“ aby sme s nimi mohli pracovať? Nezabudnite samozrejme na pripojenie konfiguračného súboru pre pripojenie s mysql, ktorý sme si vytvorili už minule. Je to úplne jednoduché a my si dnes ukážeme niekoľko najzákladnejších typov pre výber dát, ďalej pár scriptov, ktoré nám budú rôznymi možnosťami dáta interpretovať a nakoniec to zhrnieme do záveru a vyhodnotíme záver. Tak poďme na to.

Konfiguračný súbor
Ešte raz Vám ukážem, ako použijeme konfiguračný súbor. Vyberieme si prvý spôsob a to zápis mimo funkciu. Vytvoríme si súbor a nazveme si ho config.php.

$server = “localhost”; // sem zadajte url k službe (defaultne localhost)
$user  = “user”;  // sem zadajte login k mysql
$password = “password”;  // sem zadajte password k mysql
$databaza = “databaza”;  // sem zadajte databázu, kde máte uložené dáta

if (!@$spojenie = MySQL_Connect("$server", "$user", "$password")):
 echo "Nepodarilo sa pripojiť k databáze!";
 die;
endif;
if (!@$select = MySQL_Select_Db("$databaza")):
 echo "Chyba pri výbere databáze!";
 die;
endif;

Príprava
Teraz si vytvoríme nejakú šablónu pre zobrazovanie súborov, teda pár tabuliek, aby sme mali dáta pekne formované. Spravíme si to úplne jednoducho. Tu je malá šablónka.

<table>
<tr>
<td>id zaznamu</td>
<td>meno zaznamu</td>
<td>hodnota zaznamu</td>
<td>datum</td>
</tr>
</table>

Takže do tejto šablónky si budeme stále vyberať dáta a zobrazovať ich. Ešte nám chýba tabuľka s údajmi.

CREATE TABLE inet(
id int(8) auto_increment,
meno varchar(250) not null,
hodnota varchar(250) not null,
datum date not null default '0000-00-00',
PRIMARY KEY id(id)
) TYPE=MyISAM;

INSERT INTO inet VALUES (1, 'Inet.sk', 'Kvalitny server o vsetkom moznom', '2004-02-07');
INSERT INTO inet VALUES (2, 'Lammer.sk', 'Kvalitny site o tom co vas zaujima', '2004-02-06');
INSERT INTO inet VALUES (3, 'Hojko.sk', 'Newsi zo sveta internetu', '2004-02-07');

Už máme aj niekoľko údajov a teda môžeme konečne začať na zobrazovaní dát.

Vytiahnutie dát z mysql
Čiže máme jednu funkciu, ktorou si vypýtame všetky dáta od mysql. Je to príkaz mysql_query(). Týmto príkazom mysql poviete, čo potrebujete urobiť. Príkladom upraviť dáta, pridať dáta, zmazať dáta a podobne. Samozrejme, že pre každý spôsob práce s dátami existuje iný príkaz a ten sa dáva do úvodzoviek v zátvorke. Tu je pár z nich:

Výber dát:
mysql_query(“SELECT * FROM meno_tabulky”);

Pridanie riadku:
mysql_query(“INSERT INTO meno_tabulky VALUES (‘prvy_stplec’,’druhy_stplec’,’x-ty_stlpec’”);

Odstránenie riadku:
Mysql_query(“DELETE FROM nazov_tabulky WHERE id=’cislo_zaznamu’”);

Jednoducho pre každý záznam je iný spôsob a samozrejme ja som Vám ukázal len skutočný začiatok. Máte možnosť doplniť tieto príkazy aj o množstvo ďalších podmienok ako napríklad LIMIT alebo WHERE. Je toho veľa, ale to už presahuje rozsah základov o mysql. Teda ak si chcete vybrať dáta z databáze bez ďalších podmienok, použijete pre to príkaz, ktorý priradíme premennej, aby sme mohli prenášať dáta a neskôr ich použiť.
Tu je ten príkaz:

$sql = mysql_query(“SELECT * FROM inet”);

Teraz máme zabezpečené prenesenie všetkých dát, ktoré sa v tejto tabuľke nachádzajú. Avšak tieto dáta sú ako keby nereálne, keďže ich nemáme odkiaľ zobrať, nemáme žiadnu definovanú premennú. Na to, aby sme si dáta mohli priradiť premennej musíme použiť jeden z dvoch základných príkazov. Prvým je mysql_fetch_object a druhým je mysql_fetch_array. Prvá funkcia nám zabezpečí, že dáta ktoré vytiahneme z databázi budú priradené premennej ako objekt, druhá ako pole. V konečnom dôsledku sa používajú úplne jednoducho.

Prvý typ si určíme takisto do premennej:

$zaznam=mysql_fetch_object($sql);

Použijeme to tak, že ak máme napríklad stĺpec id tak dáta si vytiahneme takto:

echo $zaznam->id;

Druhý typom sú polia a tie si vyberieme takto:

$zaznam=mysql_fetch_array($sql);

Použijeme ho tak, že ak si chceme vybrať dáta z druhého stĺpca, tak jednoducho zadáme:

echo $zaznam[1];

Chcem upozorniť, že číslujeme vždy od nuly, teda prvý stĺpec je vždy 0!
Problémom zostáva už jediná vec. Keď použijeme nasledovné funkcie tak ako sme ich napísali, tak Vám to zobrazí len prvý riadok, teda riadok s id číslo 1. My si však potrebujeme vypísať všetky riadky so záznamami. Tento problém vyriešime tak, že celý zápis umiestnime do cyklu while. Potom to bude program vyzerať asi nasledovne (samozrejme že už aj upravený podľa šablóny tabuliek, ktorú sme si pripravili).
Nezabudnite na pripojenie konfiguračného súboru!

include(“config.php”);
$sql = mysql_query(“SELECT * FROM inet”);

echo "<table border=\"1\">";
echo "<tr align=\"center\">";
echo "<td>id zaznamu</td>";
echo "<td>meno zaznamu</td>";
echo "<td>hodnota zaznamu</td>";
echo "<td>datum</td>";
echo "</tr>";

while($zaznam=mysql_fetch_object($sql))
{
echo "<tr>";
echo "<td>$zaznam->id</td>";
echo "<td>$zaznam->meno</td>";
echo "<td>$zaznam->hodnota</td>";
echo "<td>$zaznam->datum</td>";
echo "</tr>"; 
}
echo "</table>";

Takto si zabezpečíme vypísanie všetkých dát z tabuľky pomocou priraďovania premennej objekt. Ak by ste chceli použiť pre vypísanie dát polia, tak to by vyzeralo asi takto:

include("config.php");
$sql=mysql_query("SELECT * FROM inet");

echo "<table border=\"1\">";
echo "<tr align=\"center\">";
echo "<td>id zaznamu</td>";
echo "<td>meno zaznamu</td>";
echo "<td>hodnota zaznamu</td>";
echo "<td>datum</td>";
echo "</tr>";
while($zaznam=mysql_fetch_array($sql))
{
 echo "<tr>";
 echo "<td>$zaznam[0]</td>";
 echo "<td>$zaznam[1]</td>";
 echo "<td>$zaznam[2]</td>";
 echo "<td>$zaznam[3]</td>";
 echo "</tr>";
}
echo "</table>";

Je to skutočne jednoduché, stačí, ak pochopíte základy a už pre Vás mysql nebude španielskou dedinou. Keďže mám obmedzený priestor pre písanie článkov, týmto ukončujem dnešný diel. Jednoducho ak chcete pochopiť mysql čo najlepšie a využiť jeho potencionálu, musíte si poriadne prečítať odbornú literatúru poprípade pre angličtiny znalých odporúčam manuál, ktorý nájdete na stránkach http://www.mysql.com/doc/en/index.html. Určite Vám bude skvelou pomôckou pri písaní skvelých aplikácii v php. Najbližšie by som sa chcel pozrieť na jednoduché vyhľadávanie v mysql a dátových súboroch a to už spadá do seriálu ako na.

Prajem množstvo príjemne nakódovaných hodín.

Rastislav Turek // lammer.sk

Neprehliadnite: