Jiří Kosek ml.
Dnes se stručně seznámíme s příkazy jazyka SQL 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 1 023:
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 = 14 000
WHERE OsobniCislo = 1 023;
Příkaz změní plat Jana Nováka na 14 000 (osobní číslo pana Nováka je 1 023).
Začleňování SQL do skriptů
ASP i PHP nabízejí pohodlný způsob práce 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 dotaz v jazyce SQL. 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ší 2 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á 2 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á 3 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 "
";
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ž řídicí 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í.
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í zazipovaného 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.
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 spojení, 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
Při práci s databázemi přes ODBC nemůžeme přistupovat náhodně k libovolnému záznamu výsledku, ale musíme je procházet postupně. K pohybu na další záznam výsledku slouží metoda MoveNext. Pomocí metody EOF můžeme zjistit, zda výsledek obsahuje ještě nějaké nezpracované záznamy. K jednotlivým položkám aktuálního záznamu se dostaneme pomocí volání vysledek.fields("jméno_položky"). Skript pro vypsání obsahu tabulky vypadá v ASP následovně:
<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>
<%
Set spojeni = Server.CreateObject("ADODB.Connection")
spojeni.Open "DSN=test"
Set vysledek = Server.CreateObject("ADODB.Recordset")
vysledek.Open "SELECT * FROM Zamestnanci", spojeni
Do Until vysledek.EOF
Response.Write "<TR>" & vbNewLine
Response.Write "<TD ALIGN=CENTER>"
Response.Write vysledek.fields("OsobniCislo")
Response.Write "</TD>" & vbNewLine
Response.Write "<TD>" & vysledek.fields("Jmeno")
Response.Write "</TD>" & vbNewLine
Response.Write "<TD>" & vysledek.fields("RC")
Response.Write "</TD>" & vbNewLine
Response.Write "<TD>" & vysledek.fields("Adresa")
Response.Write "</TD>" & vbNewLine
Response.Write "<TD ALIGN=RIGHT>"
Response.Write vysledek.fields("Plat")
Response.Write "</TD>" & vbNewLine
Response.Write "</TR>" & vbNewLine
vysledek.MoveNext
Loop
%>
</TABLE>
</BODY>
</HTML>
V příštím díle 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 přidávat do tabulek nové záznamy, modifikovat ty stávající, mazat záznamy zastaralé apod.