V dneÜnφm dφle si ukß₧eme jak vklßdat, vybφrat a zpracovßvat data z MySQL databßze pomocφ PHP.
Stejn∞ jako v p°φpad∞ konzolovΘ aplikace mysql.exe, tak i v PHP se musφme nejprve p°ipojit k SQL serveru. MySQL podporuje dva druhy p°ipojenφ - normßlnφ a tzv. persistentnφ. Rozdφl je v tom, ₧e po ukonΦenφ Φinnosti skriptu se persistentnφ p°ipojenφ neukonΦφ, ale je po°ßd aktivnφ. M∙₧eme tak mΘn∞ zat∞₧ovat server nov²mi a nov²mi p°ipojenφmi. Obvykle lze toto persistentnφ spojenφ doporuΦit v p°φpad∞ rozsßhl²ch aplikacφ. Nynφ si ukß₧eme jednotlivΘ druhy p°ipojenφ:
MySQL_Connect(<server>, <u₧ivatel>, <heslo>)
Vytvo°φ p°ipojenφ k MySQL serveru, se kter²m m∙₧eme nßsledn∞ pracovat.
Ukßzka: MySQL_Connect("localhost", "john","nereknu")
MySQL_PConnect(<server>, <u₧ivatel>, <heslo>)
Vytvo°φ p°ipojenφ k MySQL serveru, se kter²m m∙₧eme nßsledn∞ pracovat.
Ukßzka: MySQL_PConnect("localhost", "john","nereknu")
Stejn∞ jako jsme p°ipojenφ vytvo°ili m∞li bychom ho takΘ ukonΦit. V p°φpad∞ klasickΘho p°ipojenφ se odpojenφ od serveru provede po ukonΦenφ Φinnosti skriptu. Persistentnφ spojenφ se neukonΦφ ani p°i pou₧itφ tΘto funkce.
MySQL_Close(<<p°ipojenφ>>)
UkonΦφ p°ipojenφ k MySQL serveru. Jako nepovinn² parametr m∙₧eme dosadit odkaz na jednotlivΘ p°ipojenφ.
Ukßzka: MySQL_Close(), MySQL_Close($Pripojeni)
Po ·sp∞ÜnΘm p°ipojenφ k MySQL serveru musφme stejn∞ jako v p°φpad∞ konzolovΘ aplikace mysql.exe zvolit databßzi, se kterou budeme pracovat.
MySQL_Select_DB(<databßze>)
Vybere databßzi, se kterou budeme pracovat.
Ukßzka: MySQL_Select_DB("testik")
Po ·sp∞ÜnΘm v²b∞ru databßze m∙₧eme ji₧ klßst jednotlivΘ SQL dotazy.
MySQL_Query(<SQL dotaz>)
Provede zvolen² SQL dotaz a vrßtφ odkaz na v²sledek, se kter²m m∙₧eme pracovat.
Ukßzka: MySQL_Query("SELECT * FROM test WHERE id > 1"), MySQL_Query("INSERT INTO test VALUES ('','test')")
Po provedenφ SQL dotazu pomocφ funkce MySQL_Query zφskßme odkaz (identifikßtor) na v²sledek. Ke zpracovßvßnφ v²sledk∙ m∙₧eme vyu₧φt nßsledujφcφ funkce:
MySQL_Fetch_Array(<identifikßtor>)
Ulo₧φ v²sledek do asociativnφho pole, kdy k jednotliv²m sloupc∙m p°istupujeme podle jejich nßzvu.
Ukßzka: MySQL_Fetch_Array($SQL_Dotaz)
MySQL_Fetch_Row(<identifikßtor>)
Ulo₧φ v²sledek do pole, kdy k jednotliv²m sloupc∙m p°istupujeme podle jejich indexu.
Ukßzka: MySQL_Fetch_Row($SQL_Dotaz)
MySQL_Num_Rows(<identifikßtor>)
Vrßtφ poΦet °ßdk∙ zvolenΘho SQL dotazu.
Ukßzka: MySQL_Fetch_Row($SQL_Dotaz)
PHP podporuje mnohem vφce funkcφ pro zφskßvßnφ a zpracovßvßnφ ·daj∙. Tyto funkce pat°φ mezi ty nejzßkladn∞jÜφ, se kter²mi budeme pracovat.
V p°φpad∞, ₧e p°i provßd∞nφ SQL dotazu doÜlo k chyb∞, m∙₧eme vyu₧φt n∞kolika funkcφ, kterΘ nßm chybu pomohou odhalit. NejΦast∞ji to b²vß Üpatn² SQL dotaz (syntaxe).
MySQL_Error(<<identifikßtor>>)
Vrßtφ chybov² text z poslednφ databßzovΘ operace.
Ukßzka: MySQL_Error()
MySQL_Errno(<<identifikßtor>>)
Vrßtφ Φφslo chyby z poslednφ databßzovΘ operace.
Ukßzka: MySQL_Errno()
Pro oÜet°enφ m∙₧eme vyu₧φt dvou variant:
$Dotaz = MySQL_Query("SELECT * FROM test"); if (!$Dotaz) { echo "Nastala chyba: ".MySQL_Error(); }
$Dotaz = MySQL_Query("SELECT * FROM test") or Die("Nastala chyba: ".MySQL_Error());
Jako prvnφ aplikaci jsem zvolil knihu nßvÜt∞v. Tato aplikace najde svΘ uplatn∞nφ u mnoha zaΦφnajφcφch programßtor∙.
Pro tuto aplikaci si vytvo°φme novou databßzi kniha (nßzev si m∙₧ete zvolit sami, ale nßsledn∞ se musφ upravit i nastavenφ).
create database kniha; use kniha;
Nynφ si vytvo°φme tabulku se vzkazy, kterß se bude jmenovat vzkazy.
create table vzkazy ( id int not null auto_increment, jmeno varchar(50) not null, email varchar(30), www varchar(30), text text not null, datum datetime, primary key(id) )
Samotnß aplikace se bude sklßdat ze dvou skript∙. Prvnφm skriptem bude nastaveni.php, kter² slou₧φ k ulo₧enφ ·daj∙ pro p°ipojenφ k SQL serveru.
<? // ┌daje pro p°ipojenφ k MySQL serveru. $SQL_Server = "localhost"; $SQL_Uzivatel = "test"; $SQL_Heslo = "test"; $Databaze = "kniha"; ?>
Druh²m skriptem bude samotnß aplikace. Uvnit° zdrojovΘho k≤du se nachßzejφ komentß°e, kterΘ vysv∞tlujφ Φinnost skriptu.
<? // HlaviΦky, kterΘ zabrßnφ uklßdßnφ strßnky do cache. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); // Vlo₧φme skript, kter² obsahuje nastavenφ p°ipojenφ. require("nastaveni.php"); // P°ipojφme se k MySQL serveru. $Pripojeni = MySQL_Connect($SQL_Server, $SQL_Uzivatel, $SQL_Heslo) or Die(MySQL_Error()); // Vybereme naÜi databßzi. MySQL_Select_Db($Databaze) or Die(MySQL_Error()); // Funkce, kterß nßm p°evede ·daje do bezpeΦnΘ podoby. function preved($text) { return nl2br(AddSlashes(HTMLEntities($text))); } // V p°φpad∞, ze odeÜleme vzkaz. if ($_GET["odeslat"] == "ano") { // Vzkaz zkontrolujeme a p°evedeme. if ($_POST["jmeno"] != "" && $_POST["text"] != "") { $VzkazJmeno = preved($_POST["jmeno"]); $VzkazEmail = preved($_POST["email"]); $VzkazWWW = preved($_POST["www"]); $Vzkaz = preved($_POST["text"]); // Vzkaz vlo₧φme do databßze. MySQL_Query("INSERT INTO vzkazy VALUES ('', '$VzkazJmeno', '$VzkazEmail', '$VzkazWWW', '$Vzkaz', Now())") or Die(MySQL_Error()); } else // V p°φpad∞ chybnΘho vypln∞nφ ·daj∙ zobrazφme chybovΘ hlßÜenφ. { echo '<p align="center"><font color="#ff0000">Nebyly zadßny vÜechny pot°ebnΘ ·daje !!!</font></p>'; } } // Vybereme vÜechny vzkazy. // Zde jsme vyu₧ili MySQL funkce "date_format", kterß zformßtuje datum (funkce je podobnß funkci date() v PHP). $DotazVzkazy = MySQL_Query("SELECT id, jmeno, email, www, text, Date_Format(datum, '%d.%m.%Y %H:%i:%s') as datum FROM vzkazy ORDER By id DESC") or Die(MySQL_Error()); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Kniha nßvÜt∞v</title> <meta http-equiv=Content-Type content="text/html; charset=windows-1250"> <style type="text/css"> .text{ font-size: 12; font-family: Verdana; } h2{ font-size: 20; font-family: Verdana; } </style> </head> <body bgcolor="#ffffff"> <h2 align="center">Kniha nßvÜt∞v</h2> <hr width="400" size="1" color="#000000"> <form action="index.php?odeslat=ano" method="post"> <table align="center" class="text"> <tr> <td><font color="#ff0000">*</font> <b>JmΘno:</b></td> <td><input type="text" name="jmeno" value="<? echo $_POST["jmeno"];?>"></td> </tr> <tr> <td><b>E-mail:</b></td> <td><input type="text" name="email" value="<? echo $_POST["email"];?>"></td> </tr> <tr> <td><b>WWW:</b></td> <td><input type="text" name="www" value="<? echo $_POST["www"];?>"></td> </tr> <tr> <td><font color="#ff0000">*</font> <b>Text zprßvy:</b></td> <td><textarea name="text" rows="7" cols="15"><? echo $_POST["text"];?></textarea></td> </tr> <tr> <td colspan="2"><font color="#ff0000">* Pot°ebnΘ ·daje.</font></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Odeslat vzkaz"></td> </tr> </table> </form> <hr width="400" size="1" color="#000000"> <table width="400" align="center" class="text"> <? // ZφskanΘ data z databßze zpracujeme (do tabulky). While ($Data = MySQL_Fetch_Array($DotazVzkazy)) { echo "<tr>\n"; echo "<td><b>Autor</b>: " .$Data["jmeno"] ."</td>"; echo "</tr>\n"; echo "<tr>\n"; echo "<td><b>Datum</b>: " .$Data["datum"] ."</td>"; echo "</tr>\n"; echo "<tr>\n"; echo "<td><b>E-mail</b>: " .$Data["email"] ."</td>"; echo "</tr>\n"; echo "<tr>\n"; echo "<td><b>WWW</b>: " .$Data["www"] ."</td>"; echo "</tr>\n"; echo "<tr>\n"; echo "<td><b>Text: " .$Data["text"] ."</td>"; echo "</tr>\n"; echo "<tr>\n"; echo '<td><hr width="100%" align="center" size="1" color="#000000"></td>'; echo "</tr>\n"; } ?> </table> </body> </html> <? // UkonΦφme spojenφ s MySQL serverem. MySQL_Close($Pripojeni); ?>
VÜechny soubory staΦφ nynφ nakopφrovat do slo₧ky se skripty (c:\www\) a spustit prohlφ₧eΦ se zvolenou adresou (http://localhost/kniha/index.php).
Tento skript slou₧φ jako zßkladnφ kostra aplikace, kterou m∙₧ete vylepÜit. M∙₧ete p°idat oÜet°enφ kontroly formulß°e pomocφ JavaScriptu atd.
Zdrojov² k≤d celΘ aplikace si m∙₧ete stßhnout zde.
Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v poznßvßnφ jazyka PHP.