Jak pracujφ databßze na Webu
ZaΦlen∞nφ SQL do skript∙

Ji°φ Kosek ml.

Dnes se struΦn∞ seznßmφme s SQL-p°φkazy pro mazßnφ a modifikaci zßznam∙ v tabulce. PotΘ si ukß₧eme, jak se dajφ SQL-p°φkazy zaΦle≥ovat do skript∙.

Mazßnφ zßznam∙ v tabulce

K mazßnφ zßznam∙ v tabulce slou₧φ p°φkaz DELETE FROM. Zßznamy, kterΘ chceme smazat, musφme urΦit podmφnkou v klauzuli WHERE:
DELETE FROM jmΘno_tabulky WHERE podmφnka
Praktickß ukßzka smazßnφ zam∞stnance, jeho₧ osobnφ Φφslo je 1023:
DELETE FROM Zamestnanci WHERE OsobniCislo = 1023;

Modifikace zßznamu v tabulce

Ke zm∞n∞ obsahu zßznamu slou₧φ p°φkaz UPDATE:
UPDATE jmΘno_tabulky SET polo₧ka=hodnota, ... 
WHERE podmφnka
Ten modifikuje vÜechny zßznamy, kterΘ vyhovujφ podmφnce. Pokud chceme m∞nit pouze jeden zßznam -- to je ostatn∞ nejtypiΦt∞jÜφ p°φklad -- je vhodnΘ jako podmφnku uvΘst test primßrnφho klφΦe na jedineΦnou hodnotu:
UPDATE Zamestnanci SET Plat = 14000 
WHERE OsobniCislo = 1023;
P°φkaz zm∞nφ plat Jana Novßka na 14000 (osobnφ Φφslo pana Novßka je 1023).

ZaΦle≥ovßnφ SQL do skript∙

ASP i PHP nabφzejφ pohodln² pro zp∙sob s databßzemi prßv∞ pomocφ jazyka SQL. Prßce s databßzφ ve skriptu se sklßdß z n∞kolika krok∙. Nejprve je nutnΘ se k databßzi p°ipojit. PotΘ m∙₧eme na server odeslat SQL-dotaz. Zp∞t se nßm vrßtφ v²sledek, se kter²m m∙₧eme dßle pracovat -- vybφrat z n∞j jednotlivΘ zßznamy a polo₧ky. Dotazy a zpracovßnφ v²sledk∙ m∙₧eme provßd∞t opakovan∞ a nakonec bychom se m∞li od databßze odpojit.

My si dnes ukß₧eme nejjednoduÜÜφ p°φklad komunikace s databßzφ a tφm bude vypsßnφ obsahu nßm ji₧ znßmΘ tabulky Zamestnanci. Nejprve si cel² postup ukß₧eme v prost°edφ PHP za pou₧itφ nativnφho ovladaΦe pro databßzi MySQL.

Pro p°ipojenφ k databßzi slou₧φ funkce mysql_Connect(). Ta mß t°i parametry. Prvnφm z nich je adresa, na kterΘ je dostupn² SQL-server. V naÜem p°φpad∞, kdy na jednom poΦφtaΦi b∞₧φ SQL i WWW-server, pou₧ijeme adresu localhost. DalÜφ dva parametry jsou jmΘno a heslo u₧ivatele, pod kter²m se k databßzovΘmu serveru p°ipojujeme. NaÜe pokusnß databßze test je vÜak p°φstupnß ka₧dΘmu, a proto m∙₧eme jmΘno a heslo vynechat. K p°ipojenφ tedy pou₧ijeme p°φkaz:

mysql_Connect("localhost");
K samotnΘmu provßd∞nφ SQL-dotaz∙ pou₧ijeme funkci mysql. Ta mß dva parametry -- prvnφm je jmΘno databßze, ve kterΘ chceme dotaz provΘst, a druh² parametr je samotn² SQL-dotaz. Funkce vracφ hodnotu, pomocφ kterΘ pak m∙₧eme pracovat s v²sledkem dotazu. K vybrßnφ ·daj∙ o vÜech zam∞stnancφch poslou₧φ nßsledujφcφ k≤d:
$result = mysql("test", 
                "SELECT * FROM Zamestnanci");
P°es prom∞nnou $result je nynφ dostupn² v²sledek dotazu. Pokud nßs zajφmß poΦet zßznam∙, kter² vyhovuje naÜemu dotazu, m∙₧eme pou₧φt funkci mysql_NumRows($result).

Pro p°φstup k jednotliv²m polo₧kßm v²sledku slou₧φ funkce mysql_Result(). Ta mß t°i parametry:

mysql_Result(id_v²sledku, 
             Φφslo_zßznamu,
             jmΘno_polo₧ky);
Zßznamy jsou ve v²sledku Φφslovßny od nuly a jejich poΦet zjistφme prßv∞ pomocφ funkce mysql_Result(). Pro vypsßnφ jmΘna prvnφho zam∞stnance, kter² vyhovuje naÜemu dotazu, m∙₧eme pou₧φt p°φkaz:
echo mysql_Result($result, 0, "Jmeno");
Pokud chceme vypsat vÜechny zßznamy, vytvo°φme si cyklus, kter² vÜechny zßznamy zpracuje. PoΦet iteracφ tohoto cyklu nßm urΦφ v²sledek funkce mysql_NumRows().

Nynφ ji₧ vφme vÜe, co je pot°eba pro vytvo°enφ naÜeho prvnφho skriptu pracujφcφho s databßzφ. Obsah tabulky Zamestnanci p°ehledn∞ zformßtujeme pomocφ tabulky:

<HTML>
<HEAD>
<TITLE>V²pis vÜech zam∞stnanc∙</TITLE>
</HEAD>
<BODY>
<H1>V²pis vÜech zam∞stnanc∙</H1>
<TABLE BORDER=1 CELLPADDING=2>
<TR><TH>Osobnφ Φφslo</TH>
    <TH>JmΘno</TH>
    <TH>RodnΘ Φφslo</TH>
    <TH>Adresa</TH>
    <TH>Plat</TH>
</TR>    
<?
mysql_Connect("localhost");
$result = mysql("test", 
                "SELECT * FROM Zamestnanci");
$pocet = mysql_NumRows($result);
echo "V tabulce \"Zamestnanci\" je 
      $pocet zßznam∙.\n";
echo "<P>";
for($i=0; $i<$pocet; $i++):
  echo "<TR>\n";
  echo "<TD ALIGN=CENTER>". 
       mysql_Result($result, $i, "OsobniCislo").
       "</TD>\n";
  echo "<TD>".mysql_Result($result, $i, "Jmeno").
       "</TD>\n";
  echo "<TD>".mysql_Result($result, $i, "RC").
        "</TD>\n";
  echo "<TD>".mysql_Result($result, $i, "Adresa").
       "</TD>\n";
  echo "<TD ALIGN=RIGHT>".
       mysql_Result($result, $i, "Plat").
       "</TD>\n";        
  echo "</TR>\n";
endfor;
mysql_Close();
?>
</TABLE>
</BODY>
</HTML>
Pro pr∙chod vÜemi zßznamy v²sledku jsme s v²hodou pou₧ili cyklus for, jeho₧ °φdφcφ prom∞nnou ($i) pou₧φvßme p°i odvolßvßnφ na jednotlivΘ zßznamy v²sledku.

Novinkou je funkce mysql_Close(), kterß uzav°e spojenφ s databßzφ.

Obr. 1: V²pis obsahu tabulky v prohlφ₧eΦi
V²pis obsahu tabulky v prohlφ₧eΦi
Nynφ si ukß₧eme, jak stejnΘho v²sledku dosßhnout pomocφ ASP. ASP neobsahujφ nativnφ databßzovΘ ovladaΦe a p°φstup ke vÜem databßzφm musφme provßd∞t p°es rozhranφ ODBC.

To vÜak nebude jen tak. Nejprve musφme nainstalovat ODBC ovladaΦe pro nßÜ databßzov² server (MySQL) a pak pro po₧adovanou databßzi (test) vytvo°it datov² zdroj ODBC.

ODBC ovladaΦe pro MySQL nalezneme nap°. na ΦeskΘm zrcadle http://mirror.opf.slu.cz/mysql/ v souboru myodbc-2.50.17.zip nebo nov∞jÜφm. Po rozbalenφ ZIP-archivu spustφme instalaΦnφ soubor setup.exe -- ODBC ovladaΦe pro MySQL jsou nainstalovßny.

Nynφ musφme vytvo°it datov² zdroj ODBC. Ten odpovφdß jednΘ databßzi a pomocφ n∞j mohou k databßzi p°istupovat vÜechny aplikace, kterΘ podporujφ ODBC. Pro vytvo°enφ zdroje spustφme v Ovlßdacφm panelu ikonu ODBC a vybereme zßlo₧ku System DSN. Nynφ pomocφ tlaΦφtka Add... p°idßme nov² datov² zdroj. V nßsledujφcφm dialogovΘm okn∞ jako server samoz°ejm∞ vybereme MySQL. Objevφ se okno (obr. 2) pro nastavenφ parametr∙ zdroje dat.

Obr. 2: Nastavenφ parametr∙ zdroje dat
Nastavenφ parametr∙ zdroje dat
Do pole Windows DSN Name vyplnφme jmΘno datovΘho zdroje. DoporuΦuji pro datov² zdroj pou₧φt jmΘno stejnΘ jako mß databßze -- alespo≥ se v tom pozd∞ji vyznßme. Mezi dalÜφ d∙le₧itΘ parametry pat°φ jmΘno databßze (test) a adresa serveru (localhost). Parametry doporuΦuji nastavit na hodnotu 256, kterß zamezφ p°φpadn²m problΘm∙m s n∞kter²mi starÜφmi aplikacemi.

Nynφ se dostßvßme k samotnΘmu principu prßce s databßzemi v ASP. Ten je obdobn² jako u PHP. Nejprve se musφme k p°ipojit k datovΘmu zdroji. Vytvo°φme si proto objekt spojeni, kter² slou₧φ pro p°ipojovßnφ ke zdroj∙m dat:

Set spojeni = Server.CreateObject("ADODB.Connection")
K samotnΘmu p°ipojenφ slou₧φ metoda Open, jejφm₧ parametrem je identifikace datovΘho zdroje. My pou₧ijeme datov² zdroj test:
spojeni.Open "DSN=test"
Pro zadßvßnφ dotaz∙ a zpracovßnφ jejich v²sledk∙ musφme vytvo°it objekt typu Recordset -- pojmenujeme jej t°eba vysledek:
Set vysledek = Server.CreateObject("ADODB.Recordset")
SQL-dotaz se spouÜtφ pomocφ metody Open, kterß mß jako druh² parametr ji₧ vytvo°enΘ spojenφ k po₧adovanΘmu datovΘmu zdroji:
vysledek.Open "SELECT * FROM Zamestnanci", spojeni
V p°φÜtφm dφle dokonΦφme povφdßnφ o databßzφch v prost°edφ ASP. Pak si ukß₧eme, jakΘ v²hody p°inßÜφ pou₧itφ ODBC oproti nativnφm ovladaΦ∙m a jak se s ODBC pracuje v PHP. Nßsledovat bude ukßzka skript∙, kterΘ umo₧nφ u₧ivateli do tabulek p°idßvat novΘ zßznamy, modifikovat stßvajφcφ, mazat zastaralΘ apod.
© Ji°φ Kosek 1999