Jak pracují databáze na Webu: Zpřístupnění databáze přes webové rozhraní

V minulém díle jsme si ukázali, jak přistupovat k databázi pomocí nativního ovladače v PHP. Rovněž jsme nakousli zp


V minulém díle jsme si ukázali, jak přistupovat k databázi pomocí nativního
ovladače v PHP. Rovněž jsme nakousli způsob připojení databáze přes rozhraní
ODBC v ASP. Dnes dokončíme práci s ODBC v ASP a pak si ukážeme, jak využívat
rozhraní ODBC v PHP.
Práce s ODBC v ASP
V ASP se již umíme připojit k databázi a provést v ní dotaz. Výsledek dotazu je
nyní přístupný pomocí objektu vysledek. 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.Connecti
on")
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>
Velkou výhodou ODBC je, že stejným způsobem můžeme přistupovat k libovolné
databázi. Pokud se tedy z nějakého důvodu změní SQL server, na kterém běží naše
aplikace, nemusíme měnit v PHP skriptech žádný kód. Stačí upravit mapování
datových zdrojů na databáze v konfiguračním programu ODBC.
Počáteční nevýhodou, která mluvila proti použití ODBC, byl nižší výkon oproti
nativním ovladačům. Staré ODBC ovladače sloužily pouze jako mezistupeň mezi
aplikací a nativním protokolem databáze. Novější ODBC ovladače jsou však
optimalizovány a k databázovému serveru přistupují přímo jejich výkon je
srovnatelný s použitím nativních ovladačů. ODBC bylo původně vyvinuto pro
platformu Windows, ale dnes jeho implementace existuje i pro všechny
významnější verze operačního systému Unix.
Použití ODBC v PHP
Podívejme se nyní, jak se rozhraní ODBC používá v systému PHP. Názvy všech
funkcí pro práci s ODBC až neuvěřitelně začínají písmeny ODBC. Nejprve se
musíme připojit k datovému zdroji pomocí funkce ODBC_Connect(). Ta má 3
parametry jméno datového zdroje, jméno a heslo uživatele, pod kterým se ke
zdroji připojujeme. Funkce vrací identifikátor spojení. Pokud se ke zdroji
nelze připojit, vrací funkce hodnotu false.
Vrácení této hodnoty bychom měli vždy ošetřit, protože se může stát, že se
nepodaří k databázovému serveru připojit. V našich skriptech bychom měli vždy
testovat a ošetřit všechny možné chybové stavy jen tak se pozná dobře napsaná
aplikace.
K provádění SQL dotazů slouží funkce ODBC_Exec(). Jejími parametry jsou
identifikátor spojení a SQL dotaz. Funkce vrací výsledek dotazu. Pokud při
provádění SQL dotazu došlo k chybě, vrací funkce false další místo v našem
skriptu, kde bychom měli testovat chyby.
K získání jedné řádky výsledku slouží funkce ODBC_Fetch_Row(vysledek). Funkce
vrací true, pokud se podařilo získat další záznam. Pro přístup k položkám
aktuálního záznamu slouží funkce ODBC_Result(vysledek, položka). Výsledný
skript je o něco delší než předchozí, protože jsme do něj přidali nezbytné
ošetření chyb znovu opakuji, že by nemělo chybět v žádném skriptu.
<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>
<?
@$spojeni = odbc_Connect(", "","");
if (!$spojeni): echo "<TR><TH COLSPAN=5>Nepodařilo se připojit k databázi!
</TH></TR>";
else: @$vysledek = odbc_Exec($pojeni, "SELECT * FROM Zamestnanci"); if
(!$vysledek): echo "<TR><TH COLSPAN=5>Chyba při provádění SQL
dotazu!</TH></TR>"; else: while(ODBC_Fetch_Row($vysledek)): echo "<TR>n"; echo
"<TD ALIGN=CENTER>". ODBC_Result($vysledek, "OsobniCislo"). "</TD>n"; echo
"<TD>".ODBC_Result($vysledek, "Jmeno"). "</TD>n"; echo
"<TD>".ODBC_Result($vysledek, "RC"). "</TD>n"; echo
"<TD>".ODBC_Result($vysledek, "Adresa"). "</TD>n"; echo "<TD ALIGN=RIGHT>".
ODBC_Result($vysledek, "Plat"). "</TD>n"; echo "</TR>n"; endwhile; endif;
ODBC_Close($spojeni);
endif;
?>
</TABLE>
</BODY>
</HTML>
Zajímavostí je použití zavináče (@) před příkazy, které nemusejí být vždy
provedeny úspěšně. Zavináč potlačí vypsání chybového hlášení PHP, které může
běžného uživatele zděsit. Lepší je chybu ošetřit po svém a uživatele informovat
nějakým srozumitelným způsobem. Na obrázku si můžete prohlédnout, jak stránka
dopadne, když dojde k chybě a nepoužijeme zavináč.
Do skriptu lze vložit libovolný SQL příkaz a tak můžeme pomocí skriptů provádět
s tabulkami v databázi libovolné operace. Nyní si ukážeme, jak můžeme přes
webové rozhraní jednoduše přidávat nové záznamy do tabulky Zamestnanci. Nejprve
vytvoříme formulář, který bude sloužit k zadání údajů o novém zaměstnanci
uživatelem. Uložíme jej např. do souboru 15-02.php3:
<HTML>
<HEAD>
<TITLE>Přidání nového záznamu do tabulky Zamestnanci</TITLE>
</HEAD>
<BODY>
<H1>Přidání nového záznamu do tabulky Zamestnanci</H1>
<STRONG>Zadejte údaje o novém zaměstnanci:</STRONG>
<FORM ACTION=15-03.php3>
<TABLE>
<TR><TD>Osobní číslo:<TD><INPUT NAME=OsobniCislo>
<TR><TD>Jméno:<TD><INPUT NAME=Jmeno>
<TR><TD>Rodné číslo:<TD><INPUT NAME=RC>
<TR><TD>Adresa:<TD><INPUT NAME=Adresa>
<TR><TD>Plat:<TD><INPUT NAME=Plat>
<TR><TH COLSPAN=2><INPUT TYPE=Submit VALUE="Přidání zaměstnance">
</TABLE>
</FORM>
</BODY>
</HTML>
K obsluze formuláře slouží skript 15-03.php3, který obstará samotné vložení
údajů z formuláře do tabulky:
<HTML>
<HEAD>
<TITLE>Přidání nového záznamu do tabulky Zamestnanci</TITLE>
</HEAD>
<BODY>
<?
@$spojeni = odbc_Connect(", "","");
if (!$spojeni): echo "<H1>Nepodařilo se připojit k databázi!</H1>";
else: @$vysledek = odbc_Exec($pojeni, "INSERT INTO Zamestnanci VALUES(
$OsobniCislo, '$Jmeno', '$RC', '$Adresa', $Plat)"); if (!$vysledek): echo
"<H1>Nový záznam se nepodařilo přidat!</H1>"; else: ?> <H1>Nový záznam byl
úspěšně přidán</H1> <FORM ACTION=15-01.php3> <INPUT TYPE=Submit
VALUE="Prohlížení seznamu zaměstnanců"> </FORM> <FORM ACTION=15-01.php3> <INPUT
TYPE=Submit VALUE="Přidání nového zaměstnance"> </FORM>
<? endif; ODBC_Close($spojeni);
endif;
?>
</BODY>
</HTML>
Do stránky jsme navíc pomocí formulářů vložili 2 tlačítka, která slouží k
vyvolání skriptu pro výpis obsahu naší tabulky, resp. pro přidání dalšího
zaměstnance.
8 2004 / pah









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.