dum | žák

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í
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

pdf icon
PHP - databáze

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:

  1. 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 bude C:/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
  2. 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

  1. <?php
  2.  
  3. require 'config.php';
  4.  
  5. include 'header.php';
  6.  
  7. // php code ...
  8.  
  9. 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.

  1. <?php
  2.  
  3. require 'config.php';
  4. $my = new mysqli($cfg->host, $cfg->user, $cfg->pass, $cfg->db);
  5. if ($my->connect_error) {
  6. die($my->connect_error);
  7. }
  8.  
  9. include 'header.php';
  10.  
  11. // php code ...
  12.  
  13. 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:

  1. <?php
  2.  
  3. require 'config.php';
  4. $my = new mysqli($cfg->host, $cfg->user, $cfg->pass, $cfg->db);
  5. $my->set_charset("utf8");
  6. if ($my->connect_error) {
  7. die($my->connect_error);
  8. }
  9.  
  10. include 'header.php';
  11.  
  12. // php code ...
  13.  
  14. include 'footer.php';
  15.