Dynamický web
Název školy | Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace | ||
Adresa školky | Kostelní 134, 411 08 Štětí | ||
IČ | 46773509 | ||
Název operačního programu | OP Vzdělávání pro konkurenceschopnost | ||
Registrační číslo | CZ.1.07/1.5.00/34.1006 | ||
Označení vzdělávacího materiálu | |||
Název tématické oblasti (sady) | Programování | ||
Název materiálu | PHP - databáze | ||
Anotace | |||
Autor | Jazyk | ||
Očekávaný výstup | |||
Klíčová slova | |||
Druh výukového zdroje | Věková skupina žáků | ||
Typ interakce | Ročník | ||
Speciální vzdělávací potřeby | žádné | ||
Zhotoveno, (datum/období) | Celková velikost |
Obsah
Rozšíření mysqli
PHP jazyk obsahuje rozšíření mysqli
, pomocí kterého lze komunikovat s MySQL (MariaDB) databází.
Instalace
Linux
Pokud používáte OS na bázi Linuxu, pak stačí požadované rozšíření doinstalovat přímo z repozitáře.
U distribucí Debian (Ubuntu) jde o balíček php5-mysql
, tedy:
# apt-get install php5-mysql
MS Windows
V případě systému MS Windows, má distribuční balíček PHP rozšíření již v sobě, jen není aktivní.
Je třeba otevřít konfigurační soubor php.ini
a provést jednu nebo dvě změny:
Nastavení extension_dir. Je třeba říct PHP, kde jsou umístěny soubory s rozšířeními.
Pokud jste nainstalovali PHP do adresáře
C:/devel/php
, pak cesta k rozšířením budeC:/devel/php/ext
. Najděte tedy v konfiguračním souboru příslušný řádek (bude zakomentovaný, a bude jich tam možná i více). Někam na nový řádek (v místě, kde se nacházejí ostatní příklady direktivy extension_dir vložte následující:extension_dir = C:/devel/php/ext
Vyhledejte v souboru řetězec "extension=php_mysqli.dll" a smažte symbol středníku
;
na začátku řádku. Tím se povolí dané rozšíření.
Pokud máte již spuštění webový server, je třeba jej restartovat.
Instance třídy
Čtete správně, instance. Jde o pojem z OOP (objektově orientované programování) světa. V podstatě jde o to, že právě doinstalované rozšíření vám poskytlo tzv. třídu, což by mohl někdo označit jako takovou černou skříňku, která umí navázat spojení s databázovým serverem, posílat mu SQL dotazy a přijímat odpovědi.
Nemusíme tedy nyní vědět jak taková třída funguje, ale že má nějaké rozhraní (interface), díky kterému můžeme k databázi přistupovat. Nejprve ze všeho je však nutné provést tzv. instanci. To proto, aby bylo jasné, se kterým serverem chceme komunikovat. Instancí totiž může být více (k jednomu nebo i různým serverům), nikoli jen jedna.
<?php $my = new mysqli('localhost', 'user', 'password', 'db');
V kódu výše můžete vidět, jak se vytváří taková instance → operátorem new
.
Instance se zpravidla ukládá do proměnné (zde $my
) pro opětovný přístup ke konkrétnímu spojení, abychom jej nemuseli vytvářet znovu a znovu.
Pozor! Mějte na paměti, že se bavíme o instanci třídy mysqli
. Obecně instance neslouží k vytváření spojení - jde pouze o vytvoření objektu v paměti - pouze v našem případě se třídou mysqli
se shodou okolností snažíme někam připojit.
Konstruktor
Vytváříme-li instanci libovolné třídy, probíhá při jejím procesu vytváření volání speciální metody, které se říká konstruktor.
Úloha konstruktoru spočívá v tom, že dává možnost programátorovi připravit budou instanci třídy k použití.
U třídy mysqli
jde o to navázat spojení se serverem.
Nenavážeme-li spojení, pozbývá dál smysl se třídou mysqli
dál něco dělat.
Konstruktor může a nemusí vyžadovat vstupní parametry.
V případě třídy mysqli
můžeme využít hned až 4 vstupní parametry.
Jsou to:
host
- server v podobě doménového jména nebo IP adresy (případně aliasu), ke kterému se chceme připojit;username
- databázový server může vyžadovat uživatelské jméno;password
- pro ověření uživatele je možné vyžadovat i heslo;dbname
- název databáze, ke které se chceme připojit.
V příkladu výše jsou použity již konkrétní hodnoty ve stejném pořadí, jako byly právě popsány.
Konfigurace
Časem zjistíme, že se hodí mít např. speciální soubor, ve kterém lze nastavit/měnit parametry naší aplikace. Takovými parametry mohou být i přístupové údaje k databázovému serveru.
Je pak výhodné tyto údaje mít všechny na jednom místě, aby bylo možné např. při přenášení aplikace nebo při více instalacích tyto parametry pohodlně měnit.
config.php
Vytvořme si tedy soubor config.php
, do kterého budeme ukládat konfiguraci naší aplikace.
To provedeme tak, že vytvoříme instanci obecné třídy stdClass
.
Následně přidáme několik vlastností, které budeme chtít využívat někde v naší aplikaci.
config.php
<?php $cfg = new stdClass; $cfg->host = 'localhost'; $cfg->user = 'username'; $cfg->pass = 'password'; $cfg->db = 'database';
Nyní můžeme připojit kdekoli v naší aplikaci příkazem require
.
Udělejme tak např. v souboru index.php
:
index.php
<?php require 'config.php'; include 'header.php'; // php code ... include 'footer.php';
Nyní můžeme vytvořit instanci třídy mysqli
, ovšem nyní již použijeme konfiguraci, kterou máme dostupnou v proměnné $cfg
.
<?php require 'config.php'; $my = new mysqli($cfg->host, $cfg->user, $cfg->pass, $cfg->db); if ($my->connect_error) { } include 'header.php'; // php code ... include 'footer.php';
V kódu je navíc podmínka, která zobrazí případné informace o chybě při navazování komunikace se serverem.
Kódování UTF-8
Pro správné zobrazování/ukládání českých znaků je nutné oznámit klientovi MySQL databáze → což je nyní naše PHP aplikace, že posílaná data jsou v UTF-8.
Toto dodatečné nastavení zpravidla se provádí ihned po připojení k databázi metodou set_charset()
třídy mysqli
.
Vizte následující příklad:
<?php require 'config.php'; $my = new mysqli($cfg->host, $cfg->user, $cfg->pass, $cfg->db); $my->set_charset("utf8"); if ($my->connect_error) { } include 'header.php'; // php code ... include 'footer.php';