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