Pro spojení databáze a PHP je potřeba znát alespoň několik základních informací o databázích a především o jazyce MySQL.
Databáze MySQL
Dnešní PHP stránky už si bez spolupráce s nějakou databází prakticky nedovedeme představit. V největší míře se používá databáze MySQL. Další variantou může být také např. PostgreSQL a další. Pro základní operace a funkčnost se však zaměříme pouze na databázi MySQL. Jedná se o produkt, který je zdarma, i když ne úplně ve všech případech.
Nástroje pro práci s MySQL
Nejčastějším nástrojem je phpMyAdmin. Ten umožňuje prakticky jakékoliv operace s databází i se všemi daty v ní. Bývá také součástí většiny předpřipravených balíčků webových serverů (např. PHP Web Server, PHP Easy, WAMP Server apod.).
Dalším velmi zdařilým a přitom jednoduchým nástrojem je Adminer českého autora Jakuba Vrány. Jeho výhodou je především velmi jednoduchá instalace. Obsahuje totiž pouze jeden soubor, který nakopírujeme na webový server a spustíme v prohlížeči. Srovnání Adminera a PHPMyAdmin najdete také na stránce autora – http://www.adminer.org/cs/phpmyadmin/.
Připojení k databázi
Pro připojení k databázi potřebujeme tyto základní údaje:
- název hostitele (adresa serveru) – každá databáze běží na nějakém „stroji“ (virtuálním nebo běžném serveru). Název tohoto serveru může být buď název v podobě nějaké adresy typu mysql.server.cz (případně IP adresa tohoto serveru) a nebo v případě lokálního umístění databáze v podobě tvaru localhost (případně verze IP adresy – 127.0.0.1). Název hostitele obdržíme vždy od poskytovatele webhostingu
- název databáze – název je opět buď vytvořen poskytovatelem webhostingu nebo si ho sami můžeme vytvořit v administraci našeho webhostingového účtu
- uživatelské jméno – opět platí stejná pravidla, jako u názvu databáze.
- heslo – i zde platí stejná pravidla
Někdy bývá (opravdu jen výjimečně) potřeba zadat ještě port. MySQL naschlouchá na portu 3306, pokud není při konfiguraci serveru určeno jinak.
Práce s databází
Prvním krokem je vytvoření databáze. Přes rozhraní phpMyAdminu nebo Admineru to můžeme udělat velmi jednoduše přes formulářové pole (tzv. „na kliknutí“). Velmi často také bývá minimálně jedna databáze vytvořena již se vznikem webohostingového prostoru. Každá databáze (pokud není prázdná) obsahuje tabulky. Současně s tvorbou tabulky také vytváříme sloupce tabulky, u kterých musíme definovat jejich obsah. Tedy jaká data v nich budou obsažena, jejich datový typ. Můžeme také definovat, zda je v daném sloupci povolena nulová hodnota nebo zda je daný sloupec definován jako primární klíč.
Datové typy MySQL
Základní informace
- pro omezení délky řetězce (maximální velikost je 255) používáme parametr „m“, zápis je: datovy_typ(m) – např.: TINYINT(1), nebo VARCHAR(100)
- u reálných čísel používáme navíc parametr „d“ (maximální velikost je 30), tímto parametrem omezíme délku čísla za desetinou čárkou, zápis je: datovy_typ(m,d) – např.: FLOAT(5,3)
- sloupce určené jako INDEXY (nebo i PRIMARY KEY) označíme na konci deklarace tabulky – např.: CREATE TABLE pokus (jm CHAR(20) NOT NULL, cis INT, PRIMARY KEY (jm), INDEX(cis));
- název indexu (INDEX nazev (sloupec)) zadáváme pokud bude indexů více
Datové typy se nejčastěji dělí na tři základní skupiny:
- číselné
- textové (někdy označované jako znakové nebo řetězcové)
- datumové (datum a čas)
1. Číselné
Celočíselné typy
Typ | Popis | Atributy | Rozsah |
---|---|---|---|
TINYINT | velmi malá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −128 až 127; UNSIGNED => 0 až 255 |
SMALLINT | malá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −32768 až 32767; UNSIGNED => 0 až 65535 |
MEDIUMINT | střední celá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −8388608 až 8388607; UNSIGNED => 0 až 16777215 |
INT nebo INTEGER | běžné celé číslo | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −2147483648 až 2147483647;UNSIGNED => 0 až 4294967295 |
BIGINT | velká celá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −9223372036854775808 až 9223372036854; UNSIGNED => 0 až 18446744073709551615 |
Reálné typy (s desetinnou čárkou)
Typ | Popis | Atributy | Rozsah |
---|---|---|---|
FLOAT | malá desetinná čísla | UNSIGNED, SIGNED a ZEROFILL | nejmenší nenulové hodnoty jsou ±1,175494351E−38; největší nenulové hodnoty jsou −±3,402823466E+38; UNSIGNED => záporné hodnoty jsou zakázány |
DOUBLE | velká desetinná čísla | UNSIGNED, SIGNED a ZEROFILL | nejmenší nenulové hodnoty jsou ±2,2250738585072014E-308; největší nenulové hodnoty jsou −±1,17976931348623157E+308; UNSIGNED => záporné hodnoty zakázané |
DECIMAL | velká desetinná čísla ukládaná jako řetězce | UNSIGNED, SIGNED a ZEROFILL | stejné jako DOUBLE |
2. Textové typy
Používají se pro ukládání textu; některé typy dokáží rozlišovat i velká a malá písmena; lze do nich ukládat i čísla
Typ | Popis | Atributy |
---|---|---|
CHAR | řetězec pevně dané délky 0-255; delší text bude oříznut, kratší bude doplněn mezerami do zadané délky | BINARY, CHARACTER SET |
VARCHAR | stejné jako CHAR, ale kratší text není doplněn mezerami | BINARY, CHARACTER SET |
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB | klasické hodnoty BLOB | – |
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT | klasický text | CHARACTER SET |
ENUM | výčtový typ | – |
SET | množinový typ | – |
3. Typy pro datum a čas
Typ | Popis | Rozsah |
---|---|---|
DATE |
datum ve formátu CCYY-MM-DD |
1000-01-01′ až ‚9999-12-31 |
TIME |
čas ve formátu ‚hh:mm:ss‘; pro záporné hodnoty ‚-hh:mm:ss‘; reprezentuje uplynulý čas nebo čas dne |
-838:59.59′ až ‚838:59:59 |
TIMESTAMP |
časová značka, obsahuje datum a čas; pokud zadáme NULL vyplní se zde aktuální datum a čas |
– |
DATETIME |
datum a čas ve formátu ‚CCYY-MM-DD hh:mm:ss‘ |
1000-01-01 00:00:00′ až ‚999-12-31 23:59:59 |
Modifikátory
Modifikátory jsou nastavení tabulek, kterými určujeme chování jednotlivých záznamů.
- AUTO_INCREMENT – systém si sám ve sloupci generuje unikátní (jedinečné) číselné hodnoty
– modifikátor lze použít pouze na celočíselný datový typ
– za deklarací nové tabulky můžeme ještě navíc určit výchozí hodnotu: …AUTO_INCREMENT=50; - CHARACTER SET – znaková sada sloupce
- BINARY – pro CHAR a VARCHAR; tento typ bude brán jako binární a budou se tak rozlišovat malá a velká písmena
- DEFAULT vychozi_hodnota – pokud bude buňka prázdná, systém do ní automaticky přiřadí hodnotu „vychozi_hodnota“
– řetězce nezapomeňte psát v uvozovkách - FULLTEXT INDEX – platí pro sloupce typu CHAR, VARCHAR a TEXT
– fultextový index slouží k rychlejšímu hledání dat v textových polích
– hledání v takovýchto polích provádíme pomocí píkazů MATCH a AGAINST
– př.: SELECT * FROM tabulka WHERE MATCH(sloupec) AGAINST(„hledana_hodnota“); - INDEX – sloupec/sloupce označené jako INDEX umožní rychlejší přístup k datům která obsahují
- NOT NULL – pokud použijeme tento modifikátor, označený typ bude muset v každé buňce obsahovat nějakou hodnotu
- NULL – opak NOT NULL; buňka může být prázdná
- PRIMARY KEY – označený typ bude sloužit jako primární klíč – při jeho použití musíme zároveň použít UNIQUE – sloupec nám tedy jedinečným způsobem identifikuje záznamy v tabulce
- UNIQUE – v daném sloupci nesmějí být v buňkách stejné hodnoty, tedy co kus to unikát
- UNSIGNED – pokud použijeme modifikátor UNSIGNED, datový typ bude bez znaménka a posune se interval hodnot
– u čísel s pohyblivou desetinou čárkou se interval použitím UNSIGNED neposunuje a berou se jen kladná čísla
– př.: TINYINT má rozsah -118 až +127 a TINYINT UNSIGNED má rozsah 0 až 255 - ZEROFILL – použití u čísel, dotaz doplní před číslo nuly v celé jeho šířce
– př.: pokud máme definováno MEDIUMINT(6) ZEROFILL a je v něm hodnota 123, tak se nám zobrazí 000123
Základní příkazy SQL
SQL příkazy můžete používat jak v prostředí Adminera (nebo phpMyAdminu), ale i následně v rámci PHP kódu (to je častější použití v praxi). Nejprve si ukažme práci v okně SQL příkazů:
Create table – tvorba tabulek
Pomocí tohoto příkazu vytvoříte tabulku v databázi. Zjednodušená syntaxe vypadá takto:
create table název tabulky (název sloupce datový typ null/not null)
Příklad:
create table knihy ( CisloKnihy integer not null primary key, NazevKnihy varchar(60) not null, Autor varchar(60) not null )
Tabulka nese název knihy a obsahuje celkem 3 sloupce:
- číslo knihy (CisloKnihy), datový typ integer, nesmí být nulový a je to primární klíč tabulky
- název knihy (NazevKnihy), datový typ varchar o maximální délce 60 znaků a nesmí být nulový
- autora knihy (Autor), datový typ varchar o maximální délce 60 znaků a nesmí být nulový
Insert – vložení dat
Příkazem insert se vkládají data do tabulky. Syntaxe:
insert into NazevTabulky values (hodnota,…)
Příklad:
insert into knihy values (1, 'Malý Bobeš','J.V.Pleva'); insert into knihy values (2, 'R.U.R.','Karel Čapek'); insert into knihy values (3, 'Bylo nás pět','Karel Poláček');
Select – načtení z tabulky
Příkaz select načte data z tabulky. Může být spojen i s nějakou podmínkou.
select NazevSloupce from NazevTabulky [where NazevSloupce=hodnota]
Příkaz v hranatých závorkách je volitelný
Příklad:
select CisloKnihy, NazevKnihy from knihy where Autor = 'Karel Čapek'
(vyber údaje ze sloupce CisloKnihy a NazevKnihy z tabulky Knihy, kde je uveden autor Karel Čapek)
Další příklady:
select * from knihy
– vypíše všechny položky záznamů
select NazevKnihy, Autor from knihy
– vypíše jen vybrané položky záznamů (název a autora)
select NazevKnihy, Autor from knihy order by NazevKnihy
– vypíše názvy a autory seřazené podle názvů knih
select NazevKnihy, Autor from knihy order by NazevKnihy desc
– vypíše názvy a autory seřazené podle názvů knih, ale v opačném abecedním pořadí (parametr „desc“)
select NazevKnihy, Autor from knihy where NazevKnihy like "P%" or autor like "M%"
– vypíše názvy a autory knih, jejichž názvy začínají písmenem P nebo pokud jméno autora začíná písmenem M
Delete – odstranění řádků
Příkazem delete se odstraní řádky tabulky. Syntaxe vypadá následovně:
delete from NazevTabulky [where NazevSloupce=hodnota]
Příklad:
delete from knihy where Autor = 'Karel Čapek' (odstraní z tabulky knihy všechny knihy, které mají jako autora uvedeného Karla Čapka)
Update – změna hodnot
Příkazem update se změní hodnoty sloupce v tabulce. Zjednodušená syntaxe:
update NazevTabulky set NazevSloupce = NovaHodnota
Příklad:
update knihy set Autor = 'Božena Němcová' where CisloKnihy = 3
Tento příklad změní autora knihy s číslem 3 na novou hodnotu – Božena Němcová.
Drop Table – odstranění tabulky
Tímto příkazem odstraníte celou tabulku z databáze.
Syntaxe:
drop table NazevTabulky
Příklad:
drop table knihy
To je jen několik základních nejčastěji používaných příkazů. Existuje jich samozřejmě daleko více.