Professional Documents
Culture Documents
Spis treci
Wprowadzenie
Rozdzia 1.
Wprowadzenie do PHP
19
Rozdzia 2.
Programowanie w PHP
Spis treci
Podstawy skadni.................................................................................................... 20
Przesyanie danych do przegldarki internetowej ............................................... 24
Wstawianie komentarzy......................................................................................... 28
Co to s zmienne? .................................................................................................. 32
acuchy ................................................................................................................ 36
czenie acuchw............................................................................................... 39
Liczby ..................................................................................................................... 41
Stae ........................................................................................................................ 45
Apostrof kontra cudzysw .................................................................................... 48
51
Rozdzia 3.
91
Rozdzia 4.
Wprowadzenie do MySQL
125
Spis treci
Rozdzia 5.
Wprowadzenie do SQL
141
Spis treci
Rozdzia 6.
175
Rozdzia 7.
217
Rozdzia 8.
PHP i MySQL
241
Rozdzia 9.
277
Spis treci
Stronicowanie wynikw zapyta......................................................................... 295
Wywietlanie tabel z moliwoci sortowania.................................................... 303
309
345
379
Spis treci
407
431
Spis treci
Rozdzia 15. Forum dyskusyjne przykad
459
501
547
Spis treci
Dodatek A
Instalacja
605
Skorowidz
619
Rozdzia ten zaczyna si w miejscu, w ktrym ostatni si koczy. Omwi w nim bardziej
zaawansowane zagadnienia dotyczce SQL-a i MySQL-a. Poznae ju podstawy obu tych
technologii i z pewnoci wystarcz Ci one do realizacji wielu projektw, ale dopiero ich
bardziej wyszukane moliwoci wynios Twe aplikacje internetowe na wyszy poziom.
Zaczn od szczegowego omwienia procesu projektowania bazy danych, opierajc si
na przykadzie systemu zarzdzania forum. Doprowadzi nas to oczywicie do tematu
zcze, bdcych integraln czci kadej relacyjnej bazy danych. Nastpnie bd
opisywa kolejn kategori funkcji wbudowanych MySQL-a uywanych do grupowania
wynikw zapyta.
175
Rozdzia 6.
W moim przykadowym systemie bd chcia
stworzy forum, na ktrym uytkownicy mog
Pierwsze, co musisz zrobi, gdy pracujesz z systemem zamieszcza swoje opinie i odpowiada innym
zarzdzania relacyjnymi bazami danych, takim jak internautom. Aby korzysta z forum, uytkownik
MySQL, to utworzy struktur bazy (zwan rwnie bdzie musia si zarejestrowa, a nastpnie
schematem bazy danych). Projektowanie bazy danych uwierzytelni za pomoc kombinacji nazwy i hasa.
lub inaczej modelowanie danych to niezbdny etap Przewiduj rwnie moliwo istnienia wielu
gwarantujcy dugotrwae i bezproblemowe zarzdzanie forw powiconych rnym tematom. W tabeli
Twoimi informacjami. W procesie zwanym normalizacj 6.1 pokazaem, jak wyglda przykadowy rekord.
Baza danych bdzie nosi nazw forum.
eliminuje si niepotrzebne powtrzenia informacji
i inne problemy, ktre zagraaj spjnoci danych.
Normalizacja
Wskazwki
176
Przykad
username
janek
password
haslo
actual name
Jan Kowalski
user email
jank@example.com
forum
MySQL
message date
Wskazwki
Stosuj si do reguy, w myl ktrej w nazwach
Przykad
message ID
username
janek
password
haslo
actual name
Jan Kowalski
user email
jank@example.com
forum
MySQL
message date
177
Rozdzia 6.
Zalenoci
Mwic o zalenociach w bazach danych mam
na myli to, w jaki sposb dane z jednej tabeli s
powizane z danymi wystpujcymi w drugiej.
Zalenoci midzy dwiema tabelami mog
przybiera posta jeden do jednego, jeden do wielu
lub wiele do wielu. (Dwie tabele tej samej bazy
danych mog by rwnie wcale niepowizane).
178
Wskazwki
Modelowanie baz danych rzdzi si
informacji naraz.
Przykad
message ID
username
janek
password
haslo
first name
Jan
last name
Kowalski
user email
jank@example.com
forum
MySQL
message subject
message body
message date
179
Rozdzia 6.
Aby poradzi sobie z tym problemem, utwrz
osobne pola first name i last name, ktre bd
zawiera tylko jedn warto.
Wskazwki
Dostosowanie tabeli do 1NF wymaga
180
Warto
film ID
976
tytu filmu
Casablanca
rok produkcji
1943
reyser
Michael Curtiz
aktor1
Humphrey Bogart
aktor2
Ingrid Bergman
aktor3
Peter Lorre
Film
Imi aktora
Nazwisko aktora
Casablanca
Humphrey
Bogart
Casablanca
Ingrid
Bergman
Casablanca
Peter
Lorre
Sok maltaski
Humphrey
Bogart
Sok maltaski
Peter
Lorre
181
Rozdzia 6.
Aby uczyni baz zgodn z 2NF:
1. Zidentyfikuj kolumny, ktre nie s kluczami
(rysunek 6.4).
Posugujc si technikami opisanymi wczeniej
w tym rozdziale, upewnij si, e kada nowa
tabela ma zdefiniowany klucz gwny. W tabeli
users stworzyem klucz user ID, a w tabeli
forums klucz forum ID. Poniewa pole username
w tabeli users oraz pole name w tabeli forums
musz by unikalne dla kadego rekordu i zawsze
mie warto, to mgby uy ich jako kluczy
gwnych. Oznaczaoby to jednak, e wartoci
tych pl nie mog si zmienia (zgodnie
z jednym z kryteriw wyboru klucza gwnego).
Uycie kluczy tekstowych zamiast numerycznych
powodowaoby rwnie nieco wolniejsze
dziaanie bazy danych.
182
183
Wskazwki
Rozdzia 6.
Trzecia posta normalna
184
Rezygnacja z normalizacji
185
Rozdzia 6.
Tworzenie bazy danych
potrzebne informacje.
2. Zidentyfikowa typy kolumn.
user_id
users
MEDIUMINT
username
users
VARCHAR(30)
pass
users
CHAR(40)
first_name
users
VARCHAR(20)
last_name
users
VARCHAR(40)
users
VARCHAR(80)
MySQL-a.
Podobnie jak w poprzednim rozdziale,
we wszystkich przykadach bdziemy posugiwali
si monitorem (klientem) mysqla. Oczywicie
moesz te miao korzysta z phpMyAdmina
i innych narzdzi.
186
187
Rozdzia 6.
5. Utwrz tabel users (rysunek 6.10).
CREATE TABLE users (
user_id MEDIUMINT UNSIGNED
NOT NULL AUTO_INCREMENT,
username VARCHAR(30) NOT NULL,
pass CHAR(40) NOT NULL,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
email VARCHAR(80) NOT NULL,
PRIMARY KEY (user_id)
);
TABLES;
COLUMNS FROM forums;
COLUMNS FROM messages;
COLUMNS FROM users;
Rysunek 6.10. Trzecia i ostatnia tabela w bazie Rysunek 6.11. Sprawd struktur bazy za pomoc polecenia
SHOW
188
(rysunek 6.12).
INSERT INTO forums (name) VALUES ('MySQL'),
('PHP'), ('Programowanie'), ('HTML'),
('CSS'), ('Bazy danych');
(rysunek 6.13).
189
Rozdzia 6.
3. Wstaw nowe rekordy do tabeli messages
baz danymi.
We wszystkich kolejnych przykadach
w tym rozdziale bd wykorzystywa baz,
ktr wanie zapeniem. Jeli chcesz,
moesz wykona u siebie te same polecenia
INSERT co ja lub utworzy swoje wasne.
Rysunek 6.14. W przypadku znormalizowanych baz danych bardzo czsto spotkasz si z sytuacj,
w ktrej, aby wstawi jaki rekord do tabeli, bdziesz musia zna wartoci przechowywane w innych tabelach
190
Zczenia
Poniewa relacyjne bazy danych maj zoon
struktur, aby wydoby te informacje, ktre
najbardziej nas interesuj, musimy czasem
wykona jakie niestandardowe zapytanie.
Na przykad, jeli chcesz dowiedzie si, jakie
wiadomoci zawiera forum MySQL-a, musisz
najpierw dowiedzie si, jaka jest warto
forum_id dla tego forum, a nastpnie uy
jej do pobrania wszystkich rekordw tabeli
message, ktre maj tak warto forum_id.
Jak z tego wynika, to proste zadanie wymaga
wykonania dwch zapyta. Jednak stosujc
zczenie, moesz poradzi sobie z nim
w jednym kroku.
Zczenie jest zapytaniem SQL-a uywajcym
dwch lub wicej tabel i tworzcym wirtualn
tabel wynikw. W specyfikacji SQL-a
wystpuj dwa gwne typy zcze:
wewntrzne i zewntrzne (oba maj szereg
podtypw).
Rysunek 6.15. To zczenie zwraca kolumny obu tabel dla rekordw, dla ktrych wartoci
forum_id s rwne MySQL (1)
191
Zczenia
Rozdzia 6.
Zczenia zewntrzne rni si od zcze
wewntrznych tym, e potrafi zwraca rekordy,
ktre nie speniaj wyraenia warunkowego.
Istniej trzy podtypy zcze zewntrznych: left
(lewe), right (prawe) i full (pene). Przykadem
pierwszego podtypu jest nastpujce zczenie:
SELECT * FROM forums
LEFT JOIN messages ON
forums.forum_id = messages.forum_id;
Zczenia
Rysunek 6.17. To zczenie zewntrzne zwraca wicej rekordw ni zczenie wewntrzne, poniewa zwraca
wszystkie wiersze pierwszej tabeli. Zapytanie to zwraca rwnie nazwy wszystkich forw, nawet jeli nie zawieraj
one jeszcze adnej wiadomoci
192
Zczenia
193
Rozdzia 6.
3. Pobierz identyfikator wiadomoci, temat oraz
Zczenia
194
Zczenia
195
Rozdzia 6.
Z klauzul GROUP BY czsto uywa si jednej z funkcji Tabela 6.7. Funkcje grupujce MySQL-a
agregujcych przedstawionych w tabeli 6.7 (funkcji
Przeznaczenie
tych mona uywa rwnie niezalenie od klauzuli Funkcja
AVG()
Zwraca redni warto z podanej
GROUP BY).
kolumny.
MIN()
MAX()
SUM()
COUNT()
196
197
Rozdzia 6.
Indeksy
Mechanizm indeksw to specjalny system
wykorzystywany w bazach danych do poprawy
ich wydajnoci. Zakadajc na swych tabelach
indeksy, sprawiasz, e MySQL przywizuje wag
do okrelonych kolumn. Aby indeksy mogy by
wykorzystywane w sposb maksymalnie efektywny,
MySQL przechowuje je w osobnych plikach.
Indeksy
zczenia.
X Maj wiele rnych wartoci (nie powinno si
198
Tabela
Typ indeksu
forum_id
forums
PRIMARY
name
forums
UNIQUE
message_id
messages
PRIMARY
forum_id
messages
INDEX
parent_id
messages
INDEX
user_id
messages
INDEX
body/subject
messages
FULLTEXT
date_entered
messages
INDEX
user_id
users
PRIMARY
username
users
UNIQUE
pass/username
users
INDEX
users
UNIQUE
Modyfikowanie tabel
Indeksy
Polecenie ALTER suy przede wszystkim do modyfikowania struktury tabeli w bazie danych.
Najczciej oznacza to dodawanie, usuwanie bd modyfikacj kolumn, ale rwnie dodawanie
indeksw. Polecenia ALTER mona rwnie uy do zmiany nazwy tabeli. Teoretycznie przy dobrym
projekcie bazy jej struktura nie powinna stwarza adnych problemw. Jednak w praktyce czsto
zdarza si wprowadza w niej pewne zmiany. Skadnia polecenia ALTER jest nastpujca:
ALTER TABLE nazwa_tabeli KLAUZULA;
Poniewa klauzul, ktre mona zastosowa, jest bardzo wiele, w tabeli 6.9 wymieniem tylko najczciej
stosowane. Pen list znajdziesz w podrczniku MySQL-a.
Tabela 6.9. Popularne warianty polecenia ALTER (gdzie t reprezentuje nazw tabeli, c nazw kolumny,
a i nazw indeksu. Pen specyfikacj polecenia znajdziesz w dokumentacji MySQL-a
Klauzule, ktre mona stosowa w poleceniach ALTER TABLE
Klauzula
Sposb uycia
Znaczenie
ADD COLUMN
CHANGE COLUMN
DROP COLUMN
ADD INDEX
DROP INDEX
RENAME AS
199
Rozdzia 6.
2. Za indeksy dla tabeli messages
Indeksy
Rysunek 6.28. Indeksw FULLTEXT nie mona stosowa dla wszystkich typw
tabel. Jeli napotkasz ten komunikat o bdzie, to rozwizanie znajdziesz
w tym rozdziale w czci Stosowanie rnych typw tabel
200
Indeksy
201
Rozdzia 6.
Wskazwki
Prba zaoenia indeksu UNIQUE na kolumnie
jest opcjonalne.
Zamy, e stworzye indeks dla kilku kolumn:
ALTER TABLE tabela
ADD INDEX (kol1, kol2, kol3)
Indeksy
202
Stosowanie
rnych typw tabeli
MySQL obsuguje kilka rnych typw tabeli
(typ tabeli nazywany bywa rwnie silnikiem
przechowywania). Kady z tych typw ma inne
waciwoci, odrbne ograniczenia (dotyczce
iloci przechowywanych danych)
i charakteryzuje si inn efektywnoci
dziaania w okrelonych sytuacjach. Jednak
interakcje uytkownika (w sensie wykonywania
zapyta) z rnymi typami tabel s spjne.
Najwaniejszym typem tabeli jest MyISAM. Jest
on domylnym typem tabeli na wszystkich
platformach oprcz Windows. Tabele tego
typu s najodpowiedniejsze dla wikszoci
aplikacji i umoliwiaj szybkie wykonywanie
polece SELECT oraz INSERT. Ich podstawow
wad jest to, e nie obsuguj transakcji.
203
Rozdzia 6.
Aby zmieni typ tabeli:
1. Obejrzyj aktualn informacj o tabeli
204
Wskazwki
Aby uatwi odczytanie wynikw dowolnego
205
Rozdzia 6.
Wyszukiwanie FULLTEXT
Wyszukiwanie FULLTEXT
Wskazwki
Wstawianie rekordw do tabel, na ktrych
zaoono indeks FULLTEXT, moe by znacznie
206
sowa.
X Sowa krtsze ni 4-znakowe s ignorowane.
X Sowa czsto uywane s ignorowane.
X Jeli ponad poowa rekordw spenia
Wyszukiwanie FULLTEXT
207
Rozdzia 6.
3. Wykonaj to samo wyszukiwanie FULLTEXT,
sw (rysunek 6.37).
Wyszukiwanie FULLTEXT
Wskazwki
Pamitaj, e jeli wyszukiwanie FULLTEXT
Rysunek 6.36. Moesz rwnie zobaczy stopie speniania warunku wyszukiwania przez poszczeglne rekordy
208
Wyszukiwania FULLTEXT
w trybie Boolean
AGAINST('poszukiwane_sowa'
IN BOOLEAN MODE)
Znaczenie
Maska wyszukiwania.
<
>
""
()
Tworzy podwyraenie.
209
Wyszukiwanie FULLTEXT
Rozdzia 6.
Aby wykona wyszukiwanie FULLTEXT
w trybie Boolean:
1. Wykonaj proste wyszukiwanie FULLTEXT rnych
Wyszukiwanie FULLTEXT
Rysunek 6.39. To wyszukiwanie dotyczy wariantw dwch rnych sw, z ktrych jedno ma wyszy priorytet
210
gdzie to moliwe.
Uywa wartoci cakowitych jako kluczy
gwnych.
Uwanie definiowa indeksy, wybierajc
Wyszukiwanie FULLTEXT
211
Rozdzia 6.
Wykonywanie transakcji
Wykonywanie transakcji
drugiego konta.
Jeli ktrakolwiek z tych operacji si nie powiedzie,
naley cofn je wszystkie. Jeli na przykad nie uda
si umieci pienidzy na drugim koncie, powinny
one wrci na pierwsze. Odbywa si to do momentu,
w ktrym uda si przeprowadzi ca transakcj.
Aby korzysta z transakcji w MySQL-u, trzeba
posugiwa si tabelami InnoDB (lub silnikiem
tego typu). W celu rozpoczcia nowej transakcji
w kliencie mysql naley wpisa:
START TRANSACTION;
212
danych test.
Poniewa jest to tylko przykad,
wykorzystam hipotetyczn baz danych test.
2. Utworzy now tabel accounts
Wykonywanie transakcji
213
Rozdzia 6.
4. Rozpocz transakcj i pobra biec zawarto
Wykonywanie transakcji
UPDATE accounts
SET balance=(balance+100)
WHERE id=1;
214
COMMIT;
SELECT * FROM accounts;
215
Wykonywanie transakcji
Rozdzia 6.
Wskazwki
Jedn z najwikszych zalet transakcji jest to,
Wykonywanie transakcji
216