You are on page 1of 36

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

PHP5. Radocha
z programowania
Autor: Steven Holzner
Tumaczenie: Radosaw Meryk
ISBN: 83-246-0085-X
Tytu oryginau: Spring Into PHP 5
Format: B5, stron: 344

Doskonay podrcznik dla pocztkujcych programistw


Poznaj podstawy jzyka PHP
Naucz si tworzy dynamiczne elementy witryn WWW
Skorzystaj z baz danych i mechanizmw obsugi sesji
Popularno jzyka PHP cigle ronie. Twrcom i administratorom witryn WWW nie
wystarcza ju standardowy HTML potrzebuj narzdzia pozwalajcego na kontrol
odwiedzin witryny, atw edycj artykuw, pobieranie i przesyanie plikw oraz obsug
danych przekazywanych z formularzy. Wszystkie te moliwoci oferuje PHP i witryny
WWW wykonane w tej technologii. Najnowsza wersja jzyka PHP 5, to w peni
obiektowy jzyk programowania, pozwalajcy na tworzenie rozbudowanych aplikacji
WWW, nad ktrymi zarwno twrcy, jak i uytkownicy mog mie pen kontrol.
PHP5. Radocha z programowania to podrcznik, dziki ktremu szybko poznasz jzyk
PHP i napiszesz swoje pierwsze aplikacje WWW. Czytajc t ksik, dowiesz si,
z jakich podstawowych elementw skada si program w jzyku PHP, jak czy kod
PHP ze znacznikami HTML i sterowa przebiegiem programu. Nauczysz si tworzy
skrypty weryfikujce i przetwarzajce dane z formularzy, czce si z bazami danych
i wysyajce wiadomoci e-mail. Kade z zagadnie poznasz w oparciu o praktyczne
przykady, ktre z atwoci dostosujesz do swoich wymaga.
Instalacja PHP
czenie PHP i HTML
Zmienne, operatory i instrukcje
Przetwarzanie cigw znakw
Tworzenie i wykorzystywanie funkcji
Obsuga formularzy na stronach WWW
Programowanie obiektowe w PHP5
Komunikacja z bazami danych
Obsuga sesji i plikw cookie
Przesyanie plikw za pomoc protokou FTP
Przekonaj si, jak atwe jest programowanie w PHP5

Spis treci
O autorze ......................................................................................... 9
Przedmowa ..................................................................................... 11
Rozdzia 1. Podstawowe wiadomoci o PHP ...................................................... 15
Jak uzyska dostp do PHP? .......................................................................................... 16
Konfiguracja rodowiska programistycznego ................................................................ 18
Pierwszy skrypt PHP ...................................................................................................... 20
Uruchomienie pierwszego skryptu PHP ......................................................................... 22
Co zrobi, jeli nie zadziaa? .......................................................................................... 22
czenie kodu HTML i PHP .......................................................................................... 24
Wywietlanie tekstu ....................................................................................................... 25
Dodatkowe moliwoci wywietlania tekstw ............................................................... 27
Wywietlanie caych dokumentw ................................................................................. 29
Uruchamianie skryptw PHP z wiersza polecenia ......................................................... 30
Zastosowanie komentarzy .............................................................................................. 32
Uchwyty do danych: zmienne ........................................................................................ 34
Przypisywanie wartoci do zmiennych ........................................................................... 35
Interpolacja zmiennych w cigach znakw .................................................................... 37
Tworzenie zmiennych zawierajcych nazwy zmiennych ............................................... 39
Stae ................................................................................................................................ 41
Typy danych ................................................................................................................... 43
Podsumowanie ............................................................................................................... 45

Rozdzia 2. Operatory i sterowanie przepywem ................................................. 47


Operatory arytmetyczne ................................................................................................. 48
Funkcje arytmetyczne ..................................................................................................... 48
Operatory przypisania .................................................................................................... 51
Inkrementacja i dekrementacja ....................................................................................... 52
Priorytety operatorw ..................................................................................................... 53
Operator wykonania ....................................................................................................... 55
Operatory znakowe ........................................................................................................ 56
Operatory bitowe ............................................................................................................ 57
Zastosowanie instrukcji if ............................................................................................... 58
Operatory porwna ....................................................................................................... 60
Operatory logiczne ......................................................................................................... 62
Zastosowanie instrukcji else ........................................................................................... 63
Zastosowanie instrukcji elseif ........................................................................................ 64
Operator trjskadnikowy ............................................................................................... 65

PHP5. Radocha z programowania


Zastosowanie instrukcji switch ....................................................................................... 66
Ptle for .......................................................................................................................... 67
Ptle while ...................................................................................................................... 69
Ptle do...while ............................................................................................................... 71
Ptle foreach ................................................................................................................... 72
Przerwanie dziaania ptli ............................................................................................... 73
Zastosowanie instrukcji continue ................................................................................... 74
Skadnia alternatywna .................................................................................................... 75
Podsumowanie ............................................................................................................... 76

Rozdzia 3. Przetwarzanie cigw znakw i tablic .............................................. 77


Funkcje obsugi cigw znakw ..................................................................................... 78
Zastosowanie funkcji obsugi cigw znakw ............................................................... 80
Formatowanie cigw znakw ....................................................................................... 81
Konwersja danych na cigi znakw oraz cigw znakw na dane innych typw .......... 83
Tworzenie tablic ............................................................................................................. 84
Modyfikowanie tablic ..................................................................................................... 85
Usuwanie elementw tablic ............................................................................................ 87
Przetwarzanie tablic w ptli ............................................................................................ 88
Funkcje obsugi tablic .................................................................................................... 90
Sortowanie tablic ............................................................................................................ 91
Poruszanie si wrd elementw tablic .......................................................................... 93
Zwijanie i rozwijanie tablic ............................................................................................ 95
Tworzenie zmiennych na podstawie indeksw tablic ..................................................... 96
czenie i rozdzielanie tablic ......................................................................................... 98
Porwnywanie tablic ...................................................................................................... 99
Wykonywanie dziaa na elementach tablic ................................................................. 101
Tworzenie tablic wielowymiarowych ........................................................................... 103
Przetwarzanie tablic wielowymiarowych w ptli ......................................................... 105
Operatory tablicowe ..................................................................................................... 106
Podsumowanie ............................................................................................................. 108

Rozdzia 4. Funkcje ........................................................................................ 111


Tworzenie funkcji ........................................................................................................ 112
Przekazywanie danych do funkcji ................................................................................ 113
Przekazywanie tablic do funkcji ................................................................................... 115
Domylne wartoci argumentw .................................................................................. 116
Przekazywanie argumentw przez adres ...................................................................... 118
Tworzenie list argumentw o zmiennej dugoci ......................................................... 120
Wartoci zwracane przez funkcje ................................................................................. 122
Zwracanie tablic przez funkcje ..................................................................................... 123
Zwracanie list przez funkcje ......................................................................................... 125
Zwracanie adresw przez funkcje ................................................................................ 127
Zasig zmiennych ......................................................................................................... 128
Zasig globalny ............................................................................................................ 130
Zmienne statyczne ........................................................................................................ 132
Wykorzystanie funkcji, ktrych nazwy zapisano w zmiennych ................................... 133
Tworzenie funkcji warunkowych ................................................................................. 136
Tworzenie funkcji wewntrz funkcji ............................................................................ 137
Pliki wczane .............................................................................................................. 138
Obsuga bdw zwracanych przez funkcje .................................................................. 140
Podsumowanie ............................................................................................................. 141

Spis treci

Rozdzia 5. Obsuga elementw sterujcych HTML na stronach WWW ............. 143


Przetwarzanie danych uytkownika w formularzach WWW ....................................... 143
Tworzenie pl tekstowych ............................................................................................ 145
Pobieranie informacji z pl tekstowych ....................................................................... 147
Tworzenie obszarw tekstowych .................................................................................. 149
Tworzenie pl wyboru .................................................................................................. 151
Tworzenie przecznikw ............................................................................................. 152
Tworzenie list wyboru .................................................................................................. 154
Tworzenie ukrytych elementw sterujcych ................................................................ 156
Tworzenie pl do wprowadzania hase ......................................................................... 158
Tworzenie map obrazkowych ....................................................................................... 160
Wgrywanie plikw na serwer ....................................................................................... 161
Odczytywanie wgranych plikw .................................................................................. 163
Tworzenie przyciskw: sposb 1 ................................................................................. 165
Tworzenie przyciskw: sposb 2 ................................................................................. 167
Tworzenie przyciskw: sposb 3 ................................................................................. 169
Podsumowanie ............................................................................................................. 171

Rozdzia 6. Tworzenie formularzy na stronach WWW i sprawdzanie


poprawnoci danych wprowadzanych przez uytkownikw .............. 173
Wywietlanie wszystkich danych formularza za jednym razem ................................... 174
Przydatne zmienne serwera .......................................................................................... 176
Przydatne nagwki HTTP ........................................................................................... 177
Sprawdzanie typu przegldarki za pomoc nagwkw HTTP .................................... 178
Przekierowywanie uytkownikw za pomoc nagwkw HTTP ............................... 180
Przekazywanie danych wprowadzanych w formularzach za pomoc tablic ................. 182
Aplikacje WWW w jednym skrypcie PHP ....................................................................... 183
Sprawdzanie poprawnoci danych wprowadzanych przez uytkownikw ................... 186
Sprawdzanie poprawnoci danych: pola obowizkowe ................................................ 187
Sprawdzanie poprawnoci danych: dane numeryczne .................................................. 190
Sprawdzanie poprawnoci danych: cigi znakw ......................................................... 191
Usuwanie znacznikw HTML ...................................................................................... 193
Kodowanie znacznikw HTML ................................................................................... 194
Utrzymanie danych wprowadzonych wczeniej ........................................................... 197
Wykorzystanie JavaScript do sprawdzania poprawnoci danych ................................. 198
Zastosowanie uwierzytelniania HTTP .......................................................................... 201
Podsumowanie ............................................................................................................. 201

Rozdzia 7. Programowanie obiektowe i operacje na plikach ................................ 203


Klasy i obiekty ............................................................................................................. 203
Tworzenie klas ............................................................................................................. 205
Tworzenie obiektw ..................................................................................................... 207
Ograniczenia dostpu do waciwoci i metod ............................................................. 208
Inicjowanie obiektw za pomoc konstruktorw ......................................................... 210
Tworzenie klas na podstawie innych klas: dziedziczenie ............................................. 212
Zastosowanie chronionego dziedziczenia ..................................................................... 214
Przesanianie metod ...................................................................................................... 216
Dostp do metod klasy bazowej ................................................................................... 217
Otwieranie plikw: fopen ............................................................................................. 219
Czytanie wiersza tekstu z pliku: fgets .......................................................................... 221
Czytanie pojedynczych znakw z pliku: fgetc ............................................................. 223
Czytanie danych z plikw binarnych: fread ................................................................. 224
Czytanie caej zawartoci pliku: file_get_contents ....................................................... 226
Analiza zawartoci pliku: fscanf ................................................................................... 227

PHP5. Radocha z programowania


Zapisywanie danych do pliku: fwrite ........................................................................... 229
Doczanie danych do pliku: fwrite .............................................................................. 231
Zapisywanie caej zawartoci pliku w jednej operacji: file_put_contents .................... 233
Podsumowanie ............................................................................................................. 234

Rozdzia 8. Obsuga baz danych ...................................................................... 237


Czym s bazy danych? ................................................................................................. 238
Podstawy jzyka SQL .................................................................................................. 238
Konfiguracja obsugi bazy danych w PHP ........................................................................ 240
Tworzenie bazy danych za pomoc MySQL ................................................................ 241
Wprowadzanie danych do bazy danych ....................................................................... 243
Dostp do bazy danych MySQL z PHP ........................................................................ 244
Wywietlanie zawartoci tabeli bazy danych ............................................................... 246
Aktualizowanie danych ................................................................................................ 248
Wprowadzanie nowych danych do bazy ...................................................................... 250
Usuwanie danych ......................................................................................................... 251
Tworzenie nowych tabel .............................................................................................. 253
Tworzenie bazy danych ................................................................................................ 255
Sortowanie danych ....................................................................................................... 257
Pobranie moduu PEAR DB ......................................................................................... 259
Wywietlanie zawartoci tabeli za pomoc moduu DB ............................................... 261
Wprowadzanie nowych danych do bazy za pomoc moduu DB ................................. 263
Aktualizacja danych za pomoc moduu DB ................................................................ 265
Podsumowanie ............................................................................................................. 267

Rozdzia 9. Pliki cookie, sesje, FTP i e-mail ..................................................... 269


Ustawianie plikw cookie ............................................................................................ 270
Czytanie plikw cookie ................................................................................................ 271
Ustawianie czasu wanoci plikw cookie ................................................................... 273
Usuwanie plikw cookie .............................................................................................. 275
Obsuga protokou FTP ................................................................................................ 276
FTP: pobieranie zawartoci katalogu ............................................................................ 277
FTP: pobieranie pliku ................................................................................................... 279
FTP: wgrywanie pliku na serwer .................................................................................. 281
Wysyanie wiadomoci e-mail ..................................................................................... 283
Wysyanie wiadomoci e-mail z nagwkami .............................................................. 285
Wysyanie wiadomoci e-mail z zacznikami ............................................................. 287
Obsuga sesji ................................................................................................................ 288
Zapisywanie danych sesji ............................................................................................. 290
Tworzenie licznika odwiedzin ...................................................................................... 292
Wykorzystanie sesji bez plikw cookie ........................................................................ 294
Usuwanie danych z sesji ............................................................................................... 296
Podsumowanie ............................................................................................................. 298

Dodatek A Elementy jzyka PHP .................................................................... 299


Dodatek B Funkcje PHP ................................................................................. 317
Skorowidz ..................................................................................... 329

Rozdzia 8.

Obsuga baz danych


W PHP jest wbudowana obsuga baz danych. To bardzo korzystne, poniewa przechowywanie danych na serwerze stwarza programistom wielkie moliwoci. Wiele typw
serwerw baz danych jest obsugiwanych przez PHP. List zamieszczono w tabeli 8.1.
Tabela 8.1. Obsugiwane bazy danych
Baza danych
Adabas

Ingres

Oracle

dBase

InterBase

Ovrimos

Empress

Front Base

PostgreSQL

FilePro

mSQL

Solid

Hyperwave Direct

MS-SQL

Sybase

IBM DB2

MySQL

Velocis

Informix

ODBC

SQLite

Unix dbm

Jak wida, obsugiwanych typw serwerw baz danych jest bardzo wiele. Nie moemy w tej ksice opisa wszystkich, a zatem skoncentrujemy si na tym, ktry jest
najbardziej popularny wrd programistw PHP MySQL (baz danych MySQL
mona pobra za darmo ze strony http://www.mysql.com). Najnowsza, stabilna wersja
bazy danych to MySQL 4.0. Wanie z tej wersji skorzystamy w tym rozdziale.
W dalszej czci rozdziau przyjrzymy si rwnie moduowi PHP DB, w ktrym
zaimplementowano warstw abstrakcji dla operacji z bazami danych. Dziki temu mona
pracowa z kilkoma rnymi serwerami baz danych (tabela 8.1), uywajc wywoa
tych samych funkcji.
Podrczniki wbudowanej obsugi baz danych zestawionych w tabeli 8.1 mona uzyska pod adresem http://www.php.net/nazwa_db, gdzie nazwa_db oznacza nazw bazy
danych, na przykad mysql, Sybase, mssql itp. W przypadku baz danych ODBC naley
zastosowa nazw uodbc; dla bazy danych Oracle oci8. Modu DB umoliwia dostp do wszystkich typw baz danych w taki sam sposb, ale w przypadku skorzystania
z wbudowanej obsugi, aplikacje dziaaj znacznie szybciej.

238

PHP5. Radocha z programowania

Czym s bazy danych?


A zatem czym s bazy danych? Oglna definicja jest bardzo prosta: bazy danych s
mechanizmem umoliwiajcym dostp i przetwarzanie danych pod kontrol systemu
bazy danych lub aplikacji.
Najpopularniejsz konstrukcj w bazie danych jest tabela, od ktrej zaczniemy omawianie poj zwizanych z bazami danych. Dla zobrazowania dziaania tabeli bazy
danych przeanalizujmy przykad: wyobramy sobie nauczyciela, ktrego obowizkiem
jest zapisywanie ocen uczniw. Mgby do tego wykorzysta tabelk na kartce papieru
podobn do tabeli 8.2.
Tabela 8.2. Oceny uczniw
Imi

Ocena

Anna

Marek

Edward

Franciszek

Tadeusz

Mateusz

Rafa

Tomasz

Powysza tabelka odzwierciedla typow tabel w bazie danych. Tabela komputerowa ma


jednak przewag nad papierow pod wieloma wzgldami. Mona j sortowa, indeksowa, aktualizowa i z atwoci organizowa due porcje danych (bez marnotrawienia duych iloci papieru). Tabele mona rwnie czy na kilka rnych sposobw. Z poczenia tabel powstaj tzw. relacyjne bazy danych.
Kada pojedyncza porcja informacji w tabeli, taka jak imi studenta, to pole. Zbir pl,
na przykad imi i ocena, tworz rekord.
Kady rekord odpowiada osobnemu wierszowi w tabeli, a kada kolumna reprezentuje
oddzielne pole. Zbir rekordw wierszy tworzy tabel.
A zatem, czym jest baza danych? W najbardziej konwencjonalnej formie baza danych
jest zbiorem tabel. Dostp do danych w tych tabelach uzyskuje si za pomoc jzyka
SQL. Zajmiemy si nim w nastpnym punkcie.

Podstawy jzyka SQL


Do komunikowania si z bazami danych w PHP wykorzystujemy jzyk SQL (ang.
Structured Query Language). Celem tego rozdziau jest zaprezentowanie wiadomoci
niezbdnych do posugiwania si jzykiem SQL w PHP. Zamy, e mamy tabel

Rozdzia 8. Obsuga baz danych

239

o nazwie owoc. Aby uzyska jej kopi, dostpn do przetwarzania w kodzie PHP, naley
wykona nastpujc instrukcj SQL (tzw. zapytanie):
SELECT * FROM owoc

Do wykonania powyszego zapytania z poziomu PHP wykorzystamy funkcj mysql_


query:
$query = "SELECT * FROM owoc";
$result = mysql_query($query)or die("Wykonanie zapytania nie powiodo si:
".mysql_error());

Dla wprawy przeanalizujemy kilka przykadw instrukcji SQL. Czytelnicy dobrze


znajcy jzyk SQL mog pomin ten fragment. Ci, ktrzy go nie znaj, powinni uwanie
przestudiowa opisane tu zagadnienia, poniewa ich znajomo bdzie potrzebna w dalszej
czci tego rozdziau. Przyjmijmy, e w bazie danych jest tabela owoc, ktra ma dwa
pola nazwa (np. jabka lub pomaracze) oraz ilo (reprezentujca ilo owocw
okrelonego rodzaju w magazynie).
Do pobrania pl z tabeli wykorzystamy instrukcj SELECT. Oto przykad instrukcji, w ktrej symbol wieloznaczny * posuy do pobrania wszystkich rekordw z tabeli owoc:
SELECT * FROM owoc

Instrukcja zwraca zestaw rekordw zawierajcy wszystkie wiersze tabeli owoc. Z tabeli
mona rwnie pobiera okrelone pola. W naszym kolejnym przykadzie z tabeli owoc
wybierzemy pola nazwa i ilo:
SELECT nazwa, ilo FROM owoc

Za pomoc klauzuli WHERE konfiguruje si kryteria wybierania rekordw, ktre musz


spenia wiersze w zestawie rekordw generowanym przez zapytanie. Aby wybra
wszystkie rekordy z tabeli owoc, gdzie pole nazwa ma warto jabka, mona skorzysta
z nastpujcej instrukcji:
SELECT * FROM owoc WHERE nazwa= "jabka"

Oprcz znaku rwnoci stosuje si dla pl take inne operatory porwna:


< (mniejszy ni);
<= (mniejszy bd rwny);
> (wikszy ni);
>= (wikszy bd rwny);

Za pomoc klauzuli IN okrela si zbir wartoci pola speniajcych warunki zapytania. Na przykad, aby wybra rekordy, w ktrych pole nazwa ma warto jabka lub
pomaracze, mona wykorzysta instrukcj:
SELECT * FROM owoc WHERE nazwa IN ("jabka", "pomaracze")

W klauzulach instrukcji SQL stosuje si operacje logiczne. Oto przykad zapytania,


w ktrym okrelono dwa kryteria: pole nazwa powinno zawiera warto jabka lub
pomaracze, a w polu ilo musi by jaka liczba. Do sprawdzenia, czy pole nie jest
puste, wykorzystamy sowo kluczowe NULL:

240

PHP5. Radocha z programowania


SELECT * FROM owoc WHERE nazwa IN ("jabka", "pomaracze") AND ilo IS NOT NULL

Do czenia klauzul mona wykorzysta operatory logiczne AND, OR oraz NOT. Zastosowanie operatora AND oznacza, e obie klauzule musz by prawdziwe, OR e dowolna z nich moe by prawdziwa, natomiast operator NOT odwraca warto klauzuli
z prawdy na fasz i z faszu na prawd.
Jak atwo si domyli, zestaw rekordw zwracany przez instrukcj SQL, moe by uporzdkowany. Oto przykad uporzdkowania rekordw z tabeli owoc wedug pola nazwa:
SELECT * FROM owoc ORDER BY nazwa

Rekordy porzdkuje si take malejco. W tym celu stosuje si sowo kluczowe DESC:
SELECT * FROM owoc ORDER BY nazwa DESC

Rekordy mona usun z bazy danych za pomoc instrukcji DELETE. W instrukcji pokazanej poniej usuwamy wszystkie rekordy z tabeli owoc, ktrych nazwy s rne od
jabka lub pomaracze:
DELETE FROM owoc WHERE name NOT IN ("jabka", "pomaracze")

Aby wprowadzi zmiany w bazie danych, trzeba skorzysta z instrukcji UPDATE. Na


przykad, aby zmieni warto w polu ilo dla rekordu zawierajcego ilo jabek,
naley skorzysta z nastpujcej instrukcji:
UPDATE owoc SET ilo = "2006" WHERE nazwa = "jabka"

Do tabeli mona take wprowadza nowe dane oto przykad wprowadzenia nowego
wiersza do tabeli owoc:
INSERT INTO owoc (nazwa, ilo) VALUES('morele', '203')

Teraz mamy pod rk tyle narzdzi SQL, ile potrzeba. W nastpnym punkcie nauczymy
si konfigurowa obsug serwera bazy danych w PHP.

Konfiguracja obsugi bazy danych w PHP


Konfiguracja obsugi bazy danych w PHP jest do skomplikowana, a sposb wykonania tej czynnoci zaley od wykorzystywanego systemu operacyjnego. W tym punkcie
opiszemy najbardziej typowe przypadki.
W systemach Unix, Linux i MacOS obsug serwera bazy danych definiuje si podczas instalacji za pomoc opcji konfiguracyjnych zgodnie ze wskazwkami instalacji,
ktre zawiera podrcznik online znajdujcy si pod adresem www.php.net/nazwabd.
Na przykad, zastosowanie opcji konfiguracji --with-mysql [=KATALOG] wcza obsug bazy danych MySQL 4.0. Przy czym KATALOG oznacza katalog, w ktrym zainstalowano baz danych MySQL. Domylnie jest to /usr/local/mysql. W przypadku bazy
danych MySQL 4.1 (w czasie powstawania tej ksiki wersja 4.1 bya testowana) naley skorzysta z takiej samej opcji, jak dla wersji 4.0 --with-mysql [=KATALOG].

Rozdzia 8. Obsuga baz danych

241

Wwczas argument KATALOG nie ma wartoci domylnej i naley go ustawi na folder,


w ktrym zapisano plik mysql_config. W przypadku bazy danych Oracle naley zastosowa opcj --with-oci8[=KATALOG], gdzie wartoci domyln argumentu KATALOG
jest zawarto zmiennej rodowiska ORACLE_HOME. Instalacje PHP u dostawcw usug
internetowych s zazwyczaj skonfigurowane do wykorzystania bazy danych MySQL,
a take innych baz danych. Szczegowych informacji mona si dowiedzie od pracownikw pomocy technicznej.
W systemie Windows kademu obsugiwanemu serwerowi baz danych odpowiada czona dynamicznie biblioteka (plik DLL) zapisana w katalogu /ext. Moe to by na
przykad katalog c:\php\ext. W tym katalogu naley odszuka plik DLL waciwy dla
serwera bazy danych, ktrego obsug chcemy wczy i skopiowa do gwnego katalogu instalacji (na przykad c:\php). W przypadku bazy MySQL w wersji 4.0 lub
wczeniejszej, jest to plik php_mysql.dll, w MySQL 4.1 i w nowszych plik nazywa si
php_mysqli.dll, dla bazy danych Oracle php_oci8.dll; dla Microsoft SQL Server
mssql.dll.
Po skopiowaniu pliku DLL naley uaktywni obsug serwera bazy danych poprzez
usunicie w pliku php.ini symbolu komentarza rednika z wiersza extension=
odpowiadajcego wybranej bazie danych. Oto sposb uaktywnienia obsugi bazy danych
MySQL 4.0:
;extension=php_mime_magic.dll
;extension=php_mssql.dll
;extension=php_msql.dll
extension=php_mysql.dll
;ext.ension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
;extension=php_pdf.dll
;extension=php_pgsql.dll
.
.
.

Po wprowadzeniu powyszych zmian konfiguracyjnych w systemie Windows naley


zatrzyma serwer WWW i uruchomi go ponownie.

Tworzenie bazy danych


za pomoc MySQL
W tym punkcie utworzymy przykadow baz danych MySQL, korzystajc z interfejsu
wiersza polecenia. Aby uruchomi serwer bazy danych MySQL z wiersza polecenia
(okno DOS w systemie Windows), naley przej do katalogu mysql/bin i wprowadzi
nastpujce polecenie:
%mysqld --console

242

PHP5. Radocha z programowania

Wykonanie polecenia spowoduje uruchomienie serwera. Teraz trzeba uruchomi sesj


MySQL, w ktrej poczymy si z serwerem. Otwieramy nowe okno wiersza polecenia i przechodzimy do katalogu mysql/bin. Jeli wczeniej ustawilimy nazw uytkownika i haso, serwer MySQL uruchamiamy z wykorzystaniem opcji -u i -p:
%mysql -u user -p
Enter password: ********

Jeli nie ustawiono nazwy uytkownika i hasa, wystarczy wprowadzi polecenie mysql -u
root lub po prostu mysql:
%mysql -u root
Welcome to the MySQL monitor. Comnands end with ; or \g.
mysql>

Za symbolem zachty mysql> wprowadzimy instrukcj SELECT VERSION(), CURRENT_DATE;.


W ten sposb sprawdzimy, czy serwer MySQL dziaa:
mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 4.0.20a
| 2005-07-12
|
+-----------+--------------+
1 row in set (0.05 sec)

Aby zobaczy, czy zdefiniowano jakie bazy danych, mona skorzysta z instrukcji
SHOW DATABASES. Wywietli si nastpujcy wynik:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql
|
| test
|
+----------+
2 rows in set (0.01 sec)

W bazie danych MySQL s dwie wbudowane bazy danych mysql, zawierajca dane
administracyjne serwera MySQL, oraz test przykadowa baza danych. W celu zapisania informacji dotyczcych owocw i warzyw, utworzymy baz danych pod nazw
plody_rolne. Wykorzystamy do tego instrukcj CREATE DATABASE:
mysql> CREATE DATABASE plody_rolne;
Query OK, 1 row affected (0.01 sec)

Aby utworzona baza danych staa si domylna, naley wprowadzi polecenie USE
plody_rolne:
mysql> USE plody_rolne;
Database changed

Jak sprawdzi, czy w bazie danych plody_rolne s jakie tabele? Wystarczy uy polecenia SHOW TABLES:
mysql> SHOW TABLES;
Empty set (0.01 sec)

Rozdzia 8. Obsuga baz danych

243

W odpowiedzi uzyskalimy komunikat Empty set, co oznacza, e w bazie danych nie


ma jeszcze tabel. Aby utworzy tabel owoc, naley zdefiniowa jej pola danych. Pola
mog by rnego typu. Oto kilka z nich (w poniszym przykadzie wykorzystamy
cigi znakw pola typu VARCHAR):
VARCHAR(dugo) cig znakw o zmiennej dugoci;
INT liczba cakowita;
DECIMAL(cakowita_liczba_cyfr, liczba_miejsc_dziesitnych) liczba

zmiennoprzecinkowa;
DATETIME obiekty typu data i godzina, na przykad 2006-11-15 20:00:00.

Poniej zamieszczono instrukcj tworzc tabel owoc z polami nazwa i ilo typu
cig znakw:
mysql> CREATE TABLE owoc (nazwa VARCHAR(20), ilosc VARCHAR(20));
Query OK, 0 rows affected (0.13 sec)
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_plody_rolne |
+-----------------------+
| owoc
|
+-----------------------+
1 row in set (0.00 sec)

Aby wywietli opis nowej tabeli, mona skorzysta z polecenia DESCRIBE:


mysql> DESCRIBE owoc;
+-------+-------------+------+-----+---------+-------+
| Field | Type
| Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| nazwa | varchar(20) | YES |
| NULL
|
|
| ilosc | varchar(20) | YES |
| NULL
|
|
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.03 sec)

Wprowadzanie danych do bazy danych


W poprzednim punkcie utworzylimy baz danych MySQL plody_rolne i zdefiniowalimy tabel owoc do zapisywania danych na temat rnych owocw. W tym punkcie do tabeli bazy danych owoc wprowadzimy dane zestawione w tabeli 8.3.
Tabela 8.3. Dane tabeli owoc
Nazwa

Ilo

jabka

1020

pomaracze

3329

banany

8582

gruszki

235

244

PHP5. Radocha z programowania

W celu wprowadzenia tych danych do tabeli owoc bdziemy kontynuowa sesj MySQL rozpoczt w poprzednim punkcie lub rozpoczniemy now w oknie wiersza polecenia:
$mysql -u root
Welcome to the MySQL monitor. Commands end with; or \g.

Przejdziemy do bazy danych plody_rolne i za pomoc instrukcji INSERT zaadujemy


dane do tabeli:
mysql> USE plody_rolne
Database changed
mysql> INSERT INTO owoc VALUES
Query OK, 1 row affected (0.00
mysql> INSERT INTO owoc VALUES
Query OK, 1 row affected (0.00
mysql> INSERT INTO owoc VALUES
Query OK, 1 row affected (0.00
mysql> INSERT INTO owoc VALUES
Query OK, 1 row affected (0.00

('jabka', '1020');
sec)
('pomaracze', '3329');
sec)
('banany', '8582');
sec)
('gruszki', '235');
sec)

To wszystko. Dla sprawdzenia, czy dane zostay wprowadzone poprawnie, mona


wywietli zawarto tabeli owoc za pomoc instrukcji SELECT. Sesj koczy si za
pomoc polecenia quit:
mysql> SELECT * FROM owoc;
+------------+-------+
| nazwa
| ilosc |
+------------+-------+
| jabka
| 1020 |
| pomaracze | 3329 |
| banany
| 8582 |
| gruszki
| 235
|
+------------+-------+
4 rows in set (0.02 sec)
mysql>quit

Dostp do bazy danych MySQL z PHP


Nadszed czas, aby skorzysta z utworzonej bazy danych z poziomu PHP. W tym celu
naley uruchomi serwer MySQL (chyba e korzystamy z usug dostawcy Internetu,
gdzie serwer MySQL dziaa przez cay czas). Jak ju wspominalimy, w tym celu
naley uruchomi demona mysqld w katalogu mysql/bin:
%mysqld --console

Aby zatrzyma serwer, w katalogu mysql/bin, w innym oknie wiersza polecenia, naley
wpisa:
%mysqladmin -u root shutdown

Rozdzia 8. Obsuga baz danych

245

Do poczenia si z baz danych MySQL suy funkcja mysql_connect. Jej argumentami s nazwa hosta oraz opcjonalnie nazwa uytkownika i haso:
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");

Po poczeniu mona przekaza warto zmiennej $connection do funkcji mysql_


select_db w celu wybrania roboczej bazy danych. W naszym przypadku jest to baza
danych plody_rolne:
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne", $connection)
or die ("Nie mona wybra bazy danych");

Wanie poczylimy si z baz danych plody_rolne. Aby pobra wszystkie dane


z tabeli owoc, mona wykona ponisze zapytanie SQL za pomoc funkcji mysql_query
warto take zauway, e funkcja mysql_error zwraca komunikat o bdzie bazy
danych MySQL:
$query = "SELECT * FROM owoc";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());

Oprcz funkcji mysql_connect, mysql_select_db i mysql_query, dostpne s inne


funkcje obsugujce baz danych MySQL. Kilka z nich wymieniono poniej (list
funkcji wspomagajcych obsug innych serwerw baz danych mona uzyska pod
adresem www.php.net/nazwa_bd, gdzie nazwa_bd jest nazw okrelonego serwera):
mysql_affected_rows pobiera liczb wierszy, ktrych dotyczya poprzednia

operacja SQL;
mysql_change_user zmiana uytkownika;
mysql_client_encoding zwraca nazw biecego zestawu znakw;
mysql_close zamyka poczenia MySQL;
mysql_connect otwiera poczenie z serwerem MySQL;
mysql_create_db tworzy baz danych MySQL;
mysql_data_seek wyszukuje dane w bazie danych;
mysql_db_name pobiera nazw bazy danych;
mysql_db_query przesya zapytanie SQL;
mysql_drop_db usuwa baz danych MySQL;
mysql_error zwraca tekst komunikatu o bdzie ostatnio wykonywanej

operacji MySQL;
mysql_fetch_array zwraca wiersz wyniku w postaci tablicy asocjacyjnej,

tablicy z indeksami liczbowymi lub obu;


mysql_fetch_assoc pobiera wiersz wyniku w postaci tablicy asocjacyjnej;

246

PHP5. Radocha z programowania


mysql_fetch_row pobiera wiersz wyniku w postaci tablicy z indeksami

liczbowymi;
mysql_field_len zwraca dugo okrelonego pola;
mysql_field_name zwraca nazw okrelonego pola w zestawie wynikw;
mysql_field_seek przemieszcza wskanik pola do okrelonego przesunicia;
mysql_field_table zwraca nazw tabeli, w ktrej jest okrelone pole;
mysql_field_type zwraca typ wybranego pola w zestawie wynikw;
mysql_get_server_info pobiera informacje o serwerze MySQL;
mysql_info pobiera informacje o ostatnim zapytaniu;
mysql_list_dbs wywietla bazy danych dostpne na serwerze MySQL;
mysql_list_fields wywietla pola w tabeli bazy danych MySQL;
mysql_list_tables wywietla list tabel w bazie danych MySQL;
mysql_num_fields pobiera liczb pl zwrconych w wyniku zapytania;
mysql_num_rows pobiera liczb wierszy zapytania;
mysql_pconnect otwiera trwae poczenie z serwerem MySQL;
mysql_query wysya zapytanie SQL;
mysql_result pobiera dane wyniku;
mysql_select_db wybiera baz danych MySQL;
mysql_tablename pobiera nazw tabeli okrelonego pola.

Wywietlanie zawartoci
tabeli bazy danych
Jestemy gotowi, aby zaprezentowa wsplne dziaanie SQL i PHP w przegldarce.
Najpierw sprbujemy pobra tabel owoc z bazy danych plody_rolne i wywietli je
jako tabel HTML. Przede wszystkim trzeba poczy si z serwerem bazy danych,
wybra baz i utworzy obiekt $result reprezentujcy tabel owoc:
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne", $connection)
or die ("Nie mona wybra bazy danych");
$query = "SELECT * FROM owoc;
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());

Rozdzia 8. Obsuga baz danych

247

Teraz mona pobra kolejne wiersze z tabeli w ptli while za pomoc funkcji mysql_
fetch_array i odczyta pola nazwa i ilosc kadego wiersza w nastpujcy sposb:
while ($row = mysql_fetch_array($result))
{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>", $row['ilosc'], "</TD>";
echo "</TR>";
}

Pozostao jeszcze napisanie kodu HTML tabeli, w ktrej wywietlimy dane. Kompletny
kod przykadu skrypt phpdatatable.php zamieszczono na listingu 8.1. Zwrmy
uwag, e na koniec zamknlimy poczenie za pomoc funkcji mysql_close. Zawsze
naley o tym pamita po zakoczeniu wykonywania operacji z baz danych.
Listing 8.1. Wywietlanie tabeli bazy danych, phpdatatable.php
<HTML>
<HEAD>
<TITLE>
Wywietlanie tabel bazy danych MySQL
</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Wywietlanie tabel bazy danych MySQL</H1>
<?php
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne", $connection)
or die ("Nie mona wybra bazy danych");
$query = "SELECT * FROM owoc";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ".mysql_error());
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = mysql_fetch_array($result))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>", $row['ilosc'],
"</TD>";
echo "</TR>";
}
echo "</TABLE>";
mysql_close($connection);
?>
</CENTER>
</BODY>
</HTML>

248

PHP5. Radocha z programowania

Wynik dziaania skryptu zawarto tabeli owoc pokazano na rysunku 8.1. Super!
Rysunek 8.1.
Wywietlanie
zawartoci tabeli
bazy danych

To tyle. Udao si nam utworzy baz danych MySQL i pobra z niej dane, a nastpnie
wywietli je na stronie WWW.

Aktualizowanie danych
W przypadku, gdy dane zmieni si, mona z atwoci zaktualizowa baz danych za
pomoc odpowiedniej instrukcji SQL. Oto przykad: zamy, e kto kupi kilogram
gruszek, w zwizku z czym ich ilo w magazynie zmniejszya si z 235 na 234 kilogramy. Aby zaktualizowa t warto, naley podczy si do bazy danych MySQL
i wybra baz danych plody_rolne:
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");

Zobaczmy, jak mona zaktualizowa warto pola ilosc w tabeli owoc z 235 na 234
w wierszu zawierajcym dane dla gruszek:
$query = "UPDATE owoc SET ilosc = 234 WHERE nazwa = 'gruszki'";
.
.
.

Wystarczy teraz wykona to zapytanie:


$query = "UPDATE owoc SET ilosc = 234 WHERE nazwa = 'gruszki'";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ".mysql_error());

Rozdzia 8. Obsuga baz danych

249

To wszystko. Skrypt phpdataupdate.php zamieszczono na listingu 8.2.


Listing 8.2. Aktualizacja danych w bazie, phpdataupdate.php
<HTML>
<HEAD>
<TITLE>
Aktualizacja danych w bazie
</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Aktualizacja danych w bazie</H1>
<?php
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");
$query = "UPDATE owoc SET ilosc = 234 WHERE nazwa = 'gruszki'";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ".mysql_error());
$query = "SELECT * FROM owoc";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = mysql_fetch_array($result))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>",
$row['ilosc'], "</TD>";
echo "</TR>";
}
echo "</TABLE>";
mysql_close($connection);
?>
</CENTER>
</BODY>
</HTML>

Now zawarto tabeli owoc zaprezentowano na rysunku 8.2. Jak mona zauway, ilo
gruszek zmniejszya si z 235 do 234.

250

PHP5. Radocha z programowania

Rysunek 8.2.
Aktualizacja danych

Wprowadzanie nowych danych do bazy


Co zrobi, jeli do magazynu przyjmiemy nowy towar, na przykad nowy rodzaj
owocw? W jaki sposb wprowadzi nowy element do tabeli bazy danych? Pokaemy
to w naszym kolejnym przykadzie, gdzie do tabeli owoc wprowadzimy nowy rodzaj
owocw morele. Najpierw poczymy si z baz danych plody_rolne:
$connection = mysql_connect("localhost","root","")
or die ("Nie mozna poczy si z serwerem");
$db = mysql_select_db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");

Nowy wiersz dla moreli utworzymy za pomoc instrukcji SQL INSERT:


$query = "INSERT INTO owoc (nazwa, ilo) VALUES('morele', '203')";
.
.
.

Aby wprowadzi nowy wiersz, wystarczy wykona to zapytanie:


$query = "INSERT INTO owoc (nazwa, ilo) VALUES('morele', '203')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());

Po wprowadzeniu nowego wiersza mona przejrze now zawarto tabeli tak, jak
pokazano w skrypcie phpdatainsert.php, zamieszczonym na listingu 8.3.
Listing 8.3. Wprowadzanie nowych danych do bazy, phpdatainsert.php
<HTML>
<HEAD>
<TITLE>
Wprowadzanie nowych danych do bazy
</TITLE>
</HEAD>

Rozdzia 8. Obsuga baz danych

251

<BODY>
<CENTER>
<H1>Wprowadzanie nowych danych</H1>
<?php
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne", $connection)
or die ("Nie mona wybra bazy danych");
$query = "INSERT INTO owoc (nazwa, ilosc) VALUES('morele', '203')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ".
mysql_error());
$query = "SELECT * FROM owoc";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ".
mysql_error());
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = mysql_fetch_array($result))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>",
$row['ilosc'], "</TD>";
echo "</TR>";
}
echo "</TABLE>";
mysql_close($connection);
?>
</CENTER>
</BODY>
</HTML>

Rysunek 8.3 przedstawia rezultat dziaania skryptu. Jak wida, bez trudu udao si
wprowadzi morele do bazy danych.

Usuwanie danych
W jaki sposb usuwa si dane? Przyjmijmy, e dostawca moreli nie dostarcza towaru,
a zatem trzeba usun zapis w bazie danych utworzony w poprzednim punkcie. Jak
zwykle, zaczniemy od poczenia z baz danych:
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");

252

PHP5. Radocha z programowania

Rysunek 8.3.
Wprowadzanie
danych do bazy

Nastpnie zastosujemy instrukcj SQL DELETE i usuniemy wiersz dotyczcy moreli.


Wiersz do usunicia zidentyfikujemy na podstawie nazwy. Oto potrzebna instrukcja SQL:
$query = "DELETE FROM owoc WHERE nazwa = 'morele'";
.
.
.

Aby usun wiersz dotyczcy moreli, wystarczy wykona powysze zapytanie:


$query = "DELETE FROM owoc WHERE nazwa = 'morele'";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());

Po usuniciu wiersza dotyczcego moreli wywietlimy now zawarto tabeli owoc,


tak jak pokazano w skrypcie phpdatadelete.php, zamieszczonym na listingu 8.4.
Listing 8.4. Usuwanie danych, phpdatadelete.php
<HTML>
<HEAD>
<TITLE>
Usuwanie danych z bazy danych MySQL </TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Usuwanie danych z bazy danych MySQL</H1>
<?php
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");
$query = "DELETE FROM owoc WHERE nazwa = 'morele'";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());
$query = "SELECT * FROM owoc";

Rozdzia 8. Obsuga baz danych

253

$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = mysql_fetch_array($result))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>",
$row['ilosc'], "</TD>";
echo "</TR>";
}
echo "</TABLE>";
mysql_close($connection);
?>
</CENTER>
</BODY>
</HTML>

Wyniki dziaania skryptu pokazano na rysunku 8.4. Rzeczywicie, dane dotyczce moreli
nie s widoczne. W ten sposb nauczylimy si wprowadza dane do tabel bazy danych
i je z nich usuwa.
Rysunek 8.4.
Usuwanie danych

Tworzenie nowych tabel


Co zrobi, aby utworzy w bazie danych now tabel? Zamy, e interesy id dobrze i oprcz owocw, chcemy zacz sprzedawa warzywa. Czy mona w locie
utworzy tabel warzywa? Nie ma problemu. Do utworzenia nowej tabeli suy instrukcja SQL CREATE TABLE. Zobaczmy, jak mona utworzy now tabel warzywa
zawierajc pola nazwa i ilosc:

254

PHP5. Radocha z programowania


$query = "CREATE TABLE warzywa (nazwa VARCHAR(20), ilosc VARCHAR(20))";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());

Teraz, mona wprowadzi dane do nowej tabeli warzywa, za pomoc instrukcji INSERT:
$query = "INSERT INTO warzywa (nazwa, ilosc) VALUES('kukurydza', '2083')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());

Kompletny kod zamieszczono w skrypcie phpdatacreate.php, na listingu 8.5.


Listing 8.5. Tworzenie nowej tabeli, phpdatacreate.php
<HTML>
<HEAD>
<TITLE>Tworzenie nowej tabeli</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Tworzenie nowej tabeli</H1>
<?php
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");
$query = "CREATE TABLE warzywa (nazwa VARCHAR(20),
ilosc VARCHAR(20))";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());
$query = "INSERT INTO warzywa (nazwa, ilosc) VALUES(
'kukurydza', '2083')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());
$query = "INSERT INTO warzywa (nazwa, ilosc)
VALUES('szpinak, '1993')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());
$query = "INSERT INTO warzywa (nazwa, ilosc)
VALUES('buraki', '437')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());
$query = "SELECT * FROM warzywa";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = mysql_fetch_array($result))

Rozdzia 8. Obsuga baz danych

255

{
echo "<TR>";
echo "<TD>", $row[nazwa], "</TD><TD>".
$row['ilosc'], "</TD>";
echo "</TR>";
}
echo "</TABLE>";
mysql_close($connection);
?>
</CENTER>
</BODY>
</HTML>

Zawarto nowej tabeli mona zobaczy na rysunku 8.5. Doskonale.


Rysunek 8.5.
Tworzenie
nowej tabeli

Tworzenie bazy danych


Z poziomu PHP mona nawet utworzy ca baz danych. Oto przykad utworzenia bazy
danych zywnosc za pomoc polecenia CREATE DATABASE:
$query = "CREATE DATABASE IF NOT EXISTS zywnosc";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());

Do bazy danych dodamy now tabel przekaski:


$db = mysql_select_db("zywnosc",$connection)
or die ("Nie mona wybra bazy danych");
$query = "CREATE TABLE przekaski (nazwa VARCHAR(20), ilosc VARCHAR(20))";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());

256

PHP5. Radocha z programowania

Pozostaje jeszcze wprowadzenie kilku wierszy za pomoc instrukcji INSERT na wzr


skryptu phpdatacreatedb.php, zamieszczonego na listingu 8.6.
Listing 8.6. Tworzenie nowej bazy danych, phpdatacreatedb.php
<HTML>
<HEAD>
<TITLE>Tworzenie nowej bazy danych</TITLE>
</HEAD>
<BODY>
<CENTER><H1>Tworzenie nowej bazy danych</H1>
<?php
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$query = "CREATE DATABASE IF NOT EXISTS zywnosc";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ".
mysql_error());
$db = mysql_select_db("zywnosc",$connection)
or die ("Nie mona wybra bazy danych");
$query = "CREATE TABLE przekaski (nazwa VARCHAR(20), ilosc
VARCHAR(20))";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());
$query = "INSERT INTO przekaski (nazwa, ilosc)
VALUES('chipsy', '2843')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());
$query = "INSERT INTO przekaski (nazwa, ilosc) VALUES('pizza',
'1955')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());
$query = "INSERT INTO przekaski(nazwa, ilosc)
VALUES('cheeseburgery', '849')";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());
$query = "SELECT * FROM przekaski";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: " . mysql_error());
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = mysql_fetch_array($result))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>",
$row['ilosc'], "</TD>";

Rozdzia 8. Obsuga baz danych

257

echo "</TR>";
}
echo "</TABLE>";
mysql_close($connection);
?>
</CENTER>
</BODY>
</HTML>

Rezultat dziaania powyszego skryptu zawarto nowej bazy danych ilustruje


rysunek 8.6.
Rysunek 8.6.
Tworzenie nowej
bazy danych

Sortowanie danych
Czy mona posortowa dane? Nic atwiejszego. Wystarczy poczy si z baz danych
tak, jak zwykle:
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql select db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");

Po poczeniu mona uy klauzuli ORDER BY i okreli pole, wedug ktrego chcemy


sortowa. Na przykad, aby posortowa owoce wedug nazwy, mona zastosowa tak
instrukcj:
$query = "SELECT * FROM owoc ORDER BY nazwa";
.
.
.

Zapytanie wykonujemy podobnie, jak wczeniej:

258

PHP5. Radocha z programowania


$query = "SELECT * FROM owoc ORDER BY nazwa";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ". mysql_error());

Efekt sortowania mona obejrze, wykonujc skrypt phpdatasort.php, zamieszczony


na listingu 8.7.
Listing 8.7. Sortowanie danych, phpdatasort.php
<HTML>
<HEAD>
<TITLE>
Sortowanie danych
</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>
Sortowanie danych
</H1>
<?php
$connection = mysql_connect("localhost","root","")
or die ("Nie mona poczy si z serwerem");
$db = mysql_select_db("plody_rolne",$connection)
or die ("Nie mona wybra bazy danych");
$query = "SELECT * FROM owoc ORDER BY nazwa";
$result = mysql_query($query)
or die("Wykonanie zapytania nie powiodo si: ".mysql_error());
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = mysql_fetch_array($result))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>",
$row['ilosc'], "</TD>";
echo "</TR>";
}
echo "</TABLE>";
mysql_close($connection);
?>
</CENTER>
</BODY>
</HTML>

Wyniki dziaania skryptu zaprezentowano na rysunku 8.7. Jak atwo zauway, dane
z tabeli owoc zostay posortowane wedug nazwy. Sortowanie danych przydaje si do
przygotowywania danych, przeznaczonych do wywietlenia w przegldarce uytkownika.

Rozdzia 8. Obsuga baz danych

259

Rysunek 8.7.
Sortowanie danych

Pobranie moduu PEAR DB


Oprcz indywidualnej obsugi rnych serwerw baz danych, w PHP jest dostpny
modu DB, oferujcy poziom abstrakcji i ukrywajcy detale pracy z poszczeglnymi
serwerami baz danych. Jeli zdecydujemy si na skorzystanie z moduu DB, bdziemy
mogli stosowa te same funkcje do pracy z rnymi serwerami baz danych. W przypadku
zmiany serwera w kodzie bdzie trzeba jedynie wprowadzi jego nazw.
DB jest rozszerzeniem PHP nalecym do repozytorium PEAR (PHP Extension and
Application Repository). Jeli kompilujemy PHP z kodw rdowych, obsuga repozytorium PEAR jest zainstalowana jako skrypt pear.php w katalogu instalacji PHP.
Dystrybucje binarne zawieraj skrypt, ktry instaluje obsug PEAR z witryny gopear.org. Aby uruchomi rozszerzenie PEAR, naley przej do katalogu z instalacj
PHP i w wierszu polecania wpisa polecenie pear.
W systemie Windows obsuga PEAR jest dostpna w wersji instalowanej rcznie (nie
jest natomiast dostpna w wersji dostarczanej jako plik instalatora systemu Windows).
W katalogu z dystrybucj PHP (np. C:\PHP) powinien by plik go-pear.bat. Aby go
uruchomi, naley wpisa go-pear w wierszu polecenia lub dwukrotnie klikn skrypt
go-pear.bat. Po uruchomieniu wywietli si kilka pyta, a nastpnie utworzy si skrypt
pear.bat sucy do uruchamiania repozytorium PEAR.
Repozytorium PEAR skada si z wielu moduw. Jednym z nich jest modu DB adowany domylnie w czasie adowania repozytorium. Jeli zatem repozytorium PEAR
jest zainstalowane, modu DB rwnie powinien by zainstalowany (w systemie Windows po uruchomieniu skryptu go-pear.bat wywietla si pytanie, czy chcemy zainstalowa modu DB). Aby sprawdzi, jakie moduy PEAR zostay zainstalowane, wystarczy uruchomi PEAR z opcj list:
%php>pear list
INSTALLED PACKAGES:
===================
PACKAGE
VERSION STATE

260

PHP5. Radocha z programowania


Archive_Tar
Console_Getopt
DB
Mail
Net_SMTP
Net_Socket
PEAR
PHPUnit
XML_Parser
XML_RPC

1.2
1.2
1.6.5
1.1.3
1.2.6
1.0.2
1.3.1
1.0.0
1.2.0
1.1.0

stable
stable
stable
stable
stable
stable
stable
stable
stable
stable

Jest to lista zainstalowanych moduw PEAR. Jak wida, wrd nich jest modu DB.
Jeli na licie zainstalowanych moduw nie ma moduu DB, mona go zainstalowa
w nastpujcy sposb:
%pear install DB

Aby dowiedzie si, jakie inne moduy s dostpne w repozytorium PEAR, naley
skorzysta z polecenia list-all:
%pear list-all
ALL PACKAGES:
=============
PACKAGE
APC
Cache
Cache_Lite
apd
memcache
perl
PHPUnit
PHPUnit2
PHP_Compat
Var_Dump
Xdebug
Archive_Tar
bz2
Contact_Vcard_Build
Contact_Vcard_Parse
File_Fstab
File_HtAccess
File_Passwd
File_SMBPasswd
MP3_ID
zip
Auth
Auth_HTTP
Auth_PrefManager
Auth_RADIUS
Auth_SASL
radius
Benchmark
Config
.
.
.

LATEST
2.0.4
1.5.4
1.3.1
1.0
1.3
0.6
1.0.1
2.0.2
1.1.0
1.0.0
1.3.2
1.2
1.0
1.1
1.30
2.0.0
1.1.0
1.1.0
1.0.0
1.1.3
1.0
1.2.3
2.0
1.1.3
1.0.4
1.0.1
1.2.4
1.2.1
1.10.2

LOCAL

1.0.1

1.2

Rozdzia 8. Obsuga baz danych

261

Zawarto pliku pomocy dla repozytorium PEAR odczytuje si za pomoc polecenia


pear help.
Aby wykorzysta modu PEAR w PHP, mona uy w kodzie skryptu instrukcj
require. Uycie poniszej instrukcji wcza obsug moduu DB:
require 'DB.php';

Mona rwnie zastosowa instrukcj include 'DB.php';, ktra jednak rni si nieco od poprzedniej. Jeli plik, ktry chcemy wykorzysta nie istnieje, instrukcja require
uzna to za bd krytyczny i zakoczy skrypt, natomiast instrukcja include wywietli
jedynie ostrzeenie. Modu DB wykorzystamy w praktyce w nastpnym punkcie.

Wywietlanie zawartoci tabeli


za pomoc moduu DB
Oto przykad uycia funkcji moduu DB do odczytania zawartoci tabeli bazy danych
MySQL. Najpierw naley wczy obsug moduu DB za pomoc instrukcji require:
require 'DB.php';
.
.
.

Nastpnie naley podczy si do bazy danych za pomoc metody DB::connect (jak


pamitamy, za pomoc operatora :: mona wskaza klas, do ktrej naley metoda).
Oglny sposb wykorzystania tej metody przedstawia si nastpujco:
DB:connect(nazwatypudb://nazwauzytkownika:haso@serwer/nazwabd);

Jeli pracujemy na komputerze lokalnym, powinnimy zastosowa localhost zamiast


nazwy serwera. Na przykad, aby poczy si lokalnie z baz danych plody_rolne
z nazw uytkownika root i bez hasa, naley wprowadzi nastpujcy kod:
require 'DB.php';
$db = DB::connect("mysql://root:@localhost/plody_rolne");
.
.
.

Teraz mona uy metody query obiektu $db i wykona zapytanie SQL tak, jak poniej,
gdzie przeczytano ca zawarto tabeli owoc:
require 'DB.php';
$db = DB::connect('mysql://root:@localhost/plody_rolne');
$query = "SELECT * FROM owoc";
$result = $db->query($query);

262

PHP5. Radocha z programowania

Wiersz danych mona pobra za pomoc metody fetchRow. Przykad pokazano w skrypcie
phpdb.php, zamieszczonym na listingu 8.8 dziki uyciu staej DB_FETCHMODE_ASSOC
metoda zwrcia dane w postaci tablicy asocjacyjnej. Pozwolio to, by pozostaa cz
kodu nie rnia si od odczytania zawartoci tablicy z wykorzystaniem funkcji obsugi bazy MySQL.
Listing 8.8. Wywietlanie zawartoci tabeli z wykorzystaniem moduu DB, phpdb.php
<HTML>
<HEAD>
<TITLE>
Zastosowanie moduu DB do wywietlenia zawartoci tabeli
</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Zastosowanie moduu DB do wywietlenia zawartoci tabeli</H1>
<?php
require 'DB.php';
$db = DB::connect('mysql://root:@localhost/plody_rolne');
$query = "SELECT * FROM owoc";
$result = $db->query($query);
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>":

while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>", $row['ilosc'],
"</TD>";
echo "</TR>";
}
echo "</TABLE>";
?>
</CENTER>
</BODY>
</HTML>

Wynik dziaania skryptu pokazano na rysunku 8.8.

Rozdzia 8. Obsuga baz danych

263

Rysunek 8.8.
Wykorzystanie
moduu DB do
wywietlenia
tabeli

Wprowadzanie nowych danych


do bazy za pomoc moduu DB
Zobaczmy, jak za pomoc moduu DB wprowadza si do bazy nowe dane. W kolejnym przykadzie wprowadzimy dane o morelach tak, jak wczeniej zrobilimy to przy
wykorzystaniu funkcji obsugi bazy danych MySQL. Zadanie jest proste. Najpierw
trzeba si podczy do bazy danych za pomoc metody DB::connect:
$db = DB::connect('mysql://root:@localhost/plody_rolne');
.
.
.

Ponisza instrukcja SQL pozwoli na wprowadzenie do tabeli owoc wiersza danych


dotyczcego moreli:
$db = DB::connect('mysql://root:@localhost/plody_rolne');
$query = "INSERT INTO owoc (nazwa, ilosc) VALUES('morele', '203')";
.
.
.

Teraz mona wykona zapytanie za pomoc metody $db->query:


$db = DB::connect('mysql://root:@localhost/plody_rolne');
$query = "INSERT INTO owoc (nazwa, ilosc) VALUES('morele', '203')";
$result = $db->query($query);

264

PHP5. Radocha z programowania

Po wprowadzeniu nowego wiersza wywietlimy zawarto caej tabeli tak, jak pokazano w skrypcie phpdbinsert.php, na listingu 8.9.
Listing 8.9. Wprowadzanie nowych danych do bazy, phpdbinsert.php
<HTML>
<HEAD>
<TITLE>
Wykorzystanie moduu DB do wprowadzania danych
</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Zastosowanie moduu DB do wprowadzania danych</H1>
<?php
require 'DB.php';
$db = DB::connect('mysql://root:@localhost/plody_rolne');
$query = "INSERT INTO owoc (nazwa, ilosc) VALUES('morele', '203')";
$result = $db->query($query);
$query = "SELECT * FROM owoc";
$result = $db->query($query);
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))


{
echo "<TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>",
$row['ilosc'], "</TD>";
echo "</TR>";
}
echo "</TABLE>";
?>
</CENTER>
</BODY>
</HTML>

Udao si. Planowany rekord dotyczcy moreli zosta dodany, co mona zobaczy na
rysunku 8.9.

Rozdzia 8. Obsuga baz danych

265

Rysunek 8.9.
Wykorzystanie
moduu DB do
wprowadzania
danych

Aktualizacja danych
za pomoc moduu DB
Oto kolejna operacja: aktualizowanie danych z wykorzystaniem moduu DB. Podobnie, jak poprzednio zmniejszymy ilo gruszek w tabeli owoc z 235 do 234 kilogramw. Majc ju troch dowiadczenia w uywaniu jzyka SQL z moduem DB, nie
powinnimy mie z tym problemw. Wystarczy skonfigurowa waciw instrukcj
SQL, a nastpnie j wykona:
$query = "UPDATE owoc SET ilosc = 234 WHERE nazwa = 'gruszki'";
$result = $db->query($query);

Przykadow aktualizacj zaprezentowano w skrypcie phpupdate.php, na listingu 8.10.


Listing 8.10. Aktualizacja danych w bazie, phpdbupdate.php
<HTML>
<HEAD>
<TITLE>
Wykorzystanie moduu DB do aktualizowania danych
</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Wykorzystanie moduu DB do aktualizowania danych</H1>
<?php
require 'DB.php';
$db = DB::connect('mysql://root:@localhost/plody_rolne');
$query = "UPDATE owoc SET ilosc = 234 WHERE nazwa = 'gruszki'";

266

PHP5. Radocha z programowania


$result = $db->query($query);
$query = "SELECT * FROM owoc";
$result = $db->query($query);
echo
echo
echo
echo

"<TABLE BORDER='1'>";
"<TR>";
"<TH>Nazwa</TH><TH>Ilo</TH>";
"</TR>";

while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))


{
echo "</TR>";
echo "<TD>", $row['nazwa'], "</TD><TD>",
$row['ilosc'], "</TD>";
echo "</TR>";
}
echo "</TABLE>";
?>
</CENTER>
</BODY>
</HTML>

Wyniki zaprezentowano na rysunku 8.10. Jak mona zauway, bez trudu udao si
zmodyfikowa dane o iloci gruszek zapisane w bazie.
Rysunek 8.10.
Wykorzystanie
moduu DB
do aktualizacji
danych

W module DB jest rwnie metoda DB::isError, ktra suy do obsugi bdw. Modu DB, po uzyskaniu wyniku dziaania jego metody, mona przekaza do metody
DB::isError. Jeli metoda ta zwrci TRUE, oznacza to, e wystpi bd. Waciwy
komunikat o bdzie mona wywietli za pomoc metody getMessage obiektu reprezentujcego wynik:
$db = DB::connect('mysql://root:@localhost/plody_rolne');
if(DB::isError($db)){
die($db->getMessage());
}

Rozdzia 8. Obsuga baz danych

267

Teraz, kiedy umiemy ju wykonywa instrukcje SQL za pomoc moduu DB, moemy
tworzy dowolnie skomplikowane aplikacje bazodanowe. Zmiana typu serwera bazy
danych sprowadza si do podania nazwy typu serwera w cigu poczenia.

Podsumowanie
W tym rozdziale zaprezentowano zagadnienia zwizane z obsug baz danych i opisano rne opcje obsugi baz danych dostpne w PHP. Jest to bardzo przydatne, poniewa pozwala na zapisywanie danych na serwerze i zarzdzanie nimi. Oto kilka najwaniejszych zagadnie opisanych w tym rozdziale:
Do serwerw baz danych mona podczy si za pomoc funkcji PHP
mysql_connect. Baz danych wybieramy dziki funkcji mysql_select_db.
Tworzenie bazy danych umoliwia instrukcja CREATE.
Instrukcja CREATE pozwala take tworzy tabele i okrela typ danych,

ktre s w nich zapisane.


Dane wprowadza si do bazy danych za pomoc instrukcji INSERT.
Dane mona pobiera z bazy danych, uywajc instrukcji SELECT.
Aktualizacj danych w tabeli bazy danych wykonuje si za pomoc instrukcji
UPDATE.
Dziaanie instrukcji DELETE usuwa dane z tabel bazy danych.

You might also like