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.