Jako ukázku práce s databází vytvoříme jednoduchou aplikaci, demonstrující základní práci nad daty - Create, Read, Update, Delete (zkráceně CRUD aplikace).
- http://php.net/manual/en/class.pdo.php - třída PDO pro abstraktní práci nad databází.
- http://php.net/manual/en/book.mysqli.php - MySQL Improved Extension - funkce pro práci s mysql. Lze používat PDO NEBO mysqli, ale nemíchat obojí!
- http://php.net/manual/en/ref.mysql.php - klasické a staré mysql funkce, nepoužívat, musíme ošetřovat vstupy, je to složité, preferovat PDO nebo mysqli.
- http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers - rozdíly mezi mysql funkcemi a PDO.
- http://wiki.hashphp.org/Validation - ukázka SQL injectu a validace vstupů do DB.
- http://www.generatedata.com - generátor testovacích dat pro různé databáze.
Vytvořte na serveru eso.vse.cz ve vaší MySQL databázi tabulku clients:
Naplňte vytvořenou tabulku testovacími daty. Testovací data lze vygenerovat např. aplikací http://www.generatedata.com/
Pro práci s DB budeme používat třídu PDO, která je abstraktním objektem nad jakoukoli databází:
Nezapomeňte v souboru nastavit váš xname a heslo pro připojení do db!
Další možností je používat mysqli.
Zkopírujte scripty z adresáře 06-data do vašeho adresáře na serveru eso.vse.cz.
Funkční aplikaci pak najdete na adrese:
https://eso.vse.cz/~xhraj18/ (použijte váš vlastní xname :)
CRUD případy užití:
- create - vytvoření nového klienta
- read - index - výpis klientů
- read - index with pagination - výpis klientů se stránkováním
- update - úprava klienta
- delete - smazání klienta
- Pro mazání bychom měli používat HTTP POST (proč?). V příkladu je použit HTTP GET. Co třeba web roboti?
- Po přidání/úpravě/mazání záznamu je třeba udělat HTTP redirect pomocí hlavičky Location. Proč?
- Create/update děláme pomocí PDO parametrů. Lze je mít i pojmenované - named parameters, viz kód v create.
- Před delete je vhodné potvrzení ze strany uživatele, že chce záznam skutečně smazat. Jak to jde udělat?
- Záznamy v tabulce je vhodné stránkovat, viz index with pagination. Jaké to má výhody/nevýhody? (tiskové sestavy, hledání fulltextem na stránce pomocí CTRL+F...)
Vstupy posílané do DB je třeba ošetřit, jinak hrozí SQL inject útok.
Porovnejte a zkuste tyto příklady pro přidání nového klienta do databáze:
- open to attacks - neošetřené vstupy, zkuste si SQL inject útok.
- mysql_real_escape_string - ruční ošetření vstupů přes funkci mysql_real_escape_string. Srovnejte ještě s deprecated funkcí mysql_escape_string. Obě funkce jsou deprecated, používat PDO nebo mysqli!
- PDO parameters - vstupy přes PDO parametry, automaticky chráněno proti SQL inject útokům.
Detailní ukázka SQL inject útoku včetně zobrazení, co se přesně posílá do databáze.