You are on page 1of 40

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

PHP i MySQL. Tworzenie


stron WWW. Vademecum
profesjonalisty. Wydanie trzecie
Autorzy: Luke Welling, Laura Thomson
Tumaczenie: Pawe Gonera, Daniel Kaczmarek
ISBN: 83-7361-784-1
Tytu oryginau: PHP and MySQL
Web Development, 3rd Edition
Format: B5, stron: 912

Tandem PHP i MySQL to niewtpliwie najpopularniejsze i najpowszechniej


rozpoznawane narzdzia do tworzenia dynamicznych witryn WWW i aplikacji
internetowych. Ich popularno jest wynikiem nie tylko ogromnych moliwoci,
ale take bezpatnego dostpu do obu narzdzi. Za pomoc PHP i MySQL tworzone s
proste skrypty, mechanizmy zarzdzania treci serwisw WWW, sklepy internetowe
i tysice innych aplikacji. Spoeczno programistw korzystajcych z PHP i MySQL
stale si powiksza, a producenci tych narzdzi nieustannie pracuj nad ich
udoskonalaniem.
PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie trzecie
to kolejne wydanie bestsellerowego podrcznika opisujcego wszystkie aspekty
projektowania stron i aplikacji internetowych z wykorzystaniem PHP i MySQL.
W trzecim wydaniu ksiki znale mona szczegowe omwienie moliwoci
najnowszych wersji obu narzdzi -- programowania obiektowego, obsugi wyjtkw,
biblioteki SimpleXML oraz procedur skadowanych. Ksika zawiera przykady
demonstrujce wykorzystanie PHP i MySQL do realizacji rnych zada zwizanych
z funkcjonowaniem dynamicznych witryn WWW. Moe to by uwierzytelnianie
uytkownikw, tworzenie koszyka na zakupy, dynamiczne generowanie obrazkw
oraz dokumentw w formacie PDF, wysyanie poczty elektronicznej i zarzdzanie ni
oraz czenie si z usugami WWW za pomoc XML-a.
Podstawy jzyka PHP w wersji 5.0
Programowanie obiektowe w PHP
Praca z MySQL
Projektowanie bazy danych
Operacje na danych zgromadzonych w tabelach
Administrowanie baz danych
Projektowanie komercyjnych witryn WWW
Bezpieczestwo witryn WWW
Metody uwierzytelniania uytkownikw
Interakcja aplikacji z serwerem
Mechanizmy kontroli sesji
Dynamiczne generowanie grafiki i plikw PDF
Personalizacja witryny
Korzystanie z usug sieciowych za pomoc protokou SOAP

5RKUVTGEK


 





 



 
Zastosowanie PHP ............................................................................................................... 36
Tworzenie przykadowej aplikacji: Czci samochodowe Janka...................................... 36
Formularz zamwienia .................................................................................................. 36
Przetwarzanie formularza .............................................................................................. 38
Osadzanie PHP w HTML..................................................................................................... 38
Zastosowanie znacznikw PHP ..................................................................................... 39
Style znacznikw PHP................................................................................................... 40
Instrukcje PHP............................................................................................................... 40
Odstpy.......................................................................................................................... 41
Komentarze.................................................................................................................... 41
Dodawanie zawartoci dynamicznej .................................................................................... 42
Wywoywanie funkcji.................................................................................................... 43
Uywanie funkcji date()................................................................................................. 43
Dostp do zmiennych formularza ........................................................................................ 44
Zmienne formularza....................................................................................................... 44
czenie cigw ............................................................................................................ 47
Zmienne i cigi znakw ................................................................................................. 48
Identyfikatory....................................................................................................................... 48
Tworzenie zmiennych zadeklarowanych przez uytkownika............................................... 49
Przypisywanie wartoci zmiennym ...................................................................................... 49
Typy zmiennych................................................................................................................... 49
Typy danych w PHP ...................................................................................................... 50
Sia typu......................................................................................................................... 50
Rzutowanie typu ............................................................................................................ 51
Zmienne zmiennych....................................................................................................... 51
Deklarowanie i uywanie staych......................................................................................... 51
Zasig zmiennych ................................................................................................................ 52
Uywanie operatorw .......................................................................................................... 53
Operatory arytmetyczne................................................................................................. 54
Operatory cigw........................................................................................................... 55
Operatory przypisania.................................................................................................... 55
Operatory porwna ...................................................................................................... 57
Operatory logiczne......................................................................................................... 58
Operatory bitowe ........................................................................................................... 59
Pozostae operatory........................................................................................................ 59

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty

Stosowanie operatorw: obliczanie sum w formularzu........................................................ 62


Pierwszestwo i kolejno: wyznaczanie wartoci wyrae ................................................ 63
Zarzdzanie zmiennymi ....................................................................................................... 65
Sprawdzanie i ustawianie typw zmiennych ................................................................. 65
Sprawdzanie stanu zmiennej.......................................................................................... 66
Reinterpretacja zmiennych............................................................................................. 67
Implementowanie struktur kontrolujcych ........................................................................... 67
Podejmowanie decyzji za pomoc instrukcji warunkowych ................................................ 67
Instrukcja if.................................................................................................................... 67
Bloki kodu ..................................................................................................................... 68
Instrukcja else ................................................................................................................ 68
Instrukcja elseif.............................................................................................................. 69
Instrukcja switch............................................................................................................ 70
Porwnanie rnych instrukcji warunkowych ............................................................... 71
Powtarzanie dziaa przy uyciu iteracji.............................................................................. 72
Ptle while ..................................................................................................................... 73
Ptle for i foreach........................................................................................................... 74
Ptle do..while ............................................................................................................... 75
Wyamywanie si ze struktury skryptu ................................................................................ 76
Uywanie alternatywnych skadni struktur sterujcych............................................................. 76
Uywanie struktury declare.................................................................................................. 77
W nastpnym rozdziale......................................................................................................... 77

Rozdzia 2.




Zapisywanie danych do pniejszego uycia....................................................................... 79
Przechowywanie i wyszukiwanie zamwie Janka ............................................................. 80
Przetwarzanie plikw........................................................................................................... 81
Otwieranie pliku .................................................................................................................. 81
Tryby otwarcia pliku...................................................................................................... 81
Stosowanie funkcji fopen() do otwarcia pliku ............................................................... 82
Otwieranie pliku przez protok FTP lub HTTP............................................................ 84
Problemy z otwieraniem plikw .................................................................................... 85
Zapisywanie danych w pliku................................................................................................ 87
Parametry funkcji fwrite().............................................................................................. 88
Formaty plikw.............................................................................................................. 88
Zamykanie pliku .................................................................................................................. 89
Odczyt z pliku...................................................................................................................... 91
Otwieranie pliku w celu odczytu fopen().................................................................. 92
Wiedzie, kiedy przesta feof()................................................................................. 92
Odczytywanie pliku wiersz po wierszu fgets(), fgetss() i fgetcsv() .......................... 92
Odczyt caego pliku readfile(), fpassthru(), file()...................................................... 93
Odczyt pojedynczego znaku fgetc().......................................................................... 94
Odczytywanie zadanej dugoci fread() .................................................................... 95
Inne przydatne funkcje plikowe ........................................................................................... 95
Sprawdzanie istnienia pliku file_exists() .................................................................. 95
Okrelanie wielkoci pliku filesize()......................................................................... 96
Kasowanie pliku unlink().......................................................................................... 96
Poruszanie si wewntrz pliku rewind(), fseek() i ftell() .......................................... 96
Blokowanie pliku ................................................................................................................. 97
Lepszy sposb obrbki danych systemy zarzdzania bazami danych ............................. 99
Problemy zwizane ze stosowaniem plikw jednorodnych ........................................... 99
Jak RDBMS rozwizuj powysze problemy? .............................................................. 99
Propozycje dalszych lektur ................................................................................................ 100
W nastpnym rozdziale ...................................................................................................... 100

Spis treci

Rozdzia 3.

!"# $
Czym s tablice? ................................................................................................................ 101
Tablice indeksowane numerycznie .................................................................................... 102
Inicjowanie tablic indeksowanych numerycznie.......................................................... 102
Dostp do zawartoci tablicy ....................................................................................... 103
Dostp do tablic przy zastosowaniu ptli..................................................................... 104
Tablice z innymi indeksami ............................................................................................... 105
Inicjowanie tablicy....................................................................................................... 105
Dostp do elementw tablicy....................................................................................... 105
Stosowanie ptli........................................................................................................... 105
Operatory tablicowe........................................................................................................... 107
Tablice wielowymiarowe ................................................................................................... 108
Sortowanie tablic ............................................................................................................... 112
Stosowanie funkcji sort() ............................................................................................. 112
Stosowanie funkcji asort() i ksort() do porzdkowania tablic...................................... 112
Sortowanie odwrotne ................................................................................................... 113
Sortowanie tablic wielowymiarowych ............................................................................... 113
Typy sortowa definiowane przez uytkownika.......................................................... 113
Odwrotne sortowanie zdefiniowane przez uytkownika................................................ 115
Zmiany kolejnoci elementw w tablicach .......................................................................... 115
Stosowanie funkcji shuffle() ........................................................................................ 116
Stosowanie funkcji array_reverse().............................................................................. 117
adowanie tablic z plikw ................................................................................................. 118
Wykonywanie innych dziaa na tablicach ........................................................................ 121
Poruszanie si wewntrz tablicy funkcje each(), current(), reset(),
end(), next(), pos() i prev() ....................................................................................... 121
Doczanie dowolnej funkcji do kadego elementu tablicy funkcja array_walk() ......122
Liczenie elementw tablicy: count(), sizeof() i array_count_values() ......................... 123
Konwersja tablic na zmienne skalarne funkcja extract()......................................... 124
Propozycje dalszych lektur ................................................................................................ 125
W nastpnym rozdziale ...................................................................................................... 125

Rozdzia 4.

%# &'()'# 
Przykadowa aplikacja Inteligentny Formularz Pocztowy ............................................ 127
Formatowanie cigw ........................................................................................................ 129
Przycinanie cigw funkcje chop(), ltrim() i trim() ................................................ 130
Formatowanie cigw w celu ich prezentacji .............................................................. 130
Formatowanie cigw do przechowania funkcje addslashes() i stripslashes()........ 134
czenie i rozdzielanie cigw za pomoc funkcji cigw................................................ 135
Stosowanie funkcji explode(), implode() i join() ......................................................... 136
Stosowanie funkcji strtok() .......................................................................................... 136
Stosowanie funkcji substr() ......................................................................................... 137
Porwnywanie cigw ....................................................................................................... 138
Porzdkowanie cigw funkcje strcmp(), strcasecmp() i strnatcmp()..................... 138
Sprawdzanie dugoci cigu za pomoc funkcji strlen() .............................................. 139
Dopasowywanie i zamiana podcigw za pomoc funkcji cigw.................................... 139
Znajdowanie cigw w cigach funkcje strstr(), strchr(), strrchr() i stristr()........... 140
Odnajdywanie pozycji podcigu funkcje strpos() i strrpos()................................... 140
Zamiana podcigw funkcje str_replace() i substr_replace().................................. 141
Wprowadzenie do wyrae regularnych ............................................................................ 142
Podstawy...................................................................................................................... 143
Zbiory i klasy znakw.................................................................................................. 143
Powtarzalno .............................................................................................................. 145
Podwyraenia............................................................................................................... 145

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty

Podwyraenia policzalne ............................................................................................. 145


Kotwiczenie na pocztku lub na kocu cigu .............................................................. 145
Rozgazianie............................................................................................................... 146
Dopasowywanie specjalnych znakw literowych........................................................ 146
Podsumowanie znakw specjalnych ............................................................................ 146
Umieszczanie wszystkiego razem (Inteligentny Formularz)........................................ 147
Odnajdywanie podcigw za pomoc wyrae regularnych.............................................. 148
Zamiana podcigw za pomoc wyrae regularnych....................................................... 149
Rozdzielanie cigw za pomoc wyrae regularnych ...................................................... 149
Porwnanie funkcji cigw i funkcji wyrae regularnych ............................................... 150
Propozycje dalszych lektur ................................................................................................ 150
W nastpnym rozdziale ...................................................................................................... 150

Rozdzia 5.

* + 
Ponowne stosowanie kodu ................................................................................................. 151
Koszt............................................................................................................................ 152
Niezawodno.............................................................................................................. 152
Spjno ...................................................................................................................... 152
Stosowanie funkcji require() i include() .............................................................................. 152
Funkcja require() ......................................................................................................... 153
Rozszerzenia plikw i require() ................................................................................... 154
Znaczniki PHP i require() ............................................................................................ 154
Stosowanie require() w szablonach stron WWW............................................................... 154
Stosowanie funkcji include() ....................................................................................... 159
Stosowanie funkcji require_once() i include_once().................................................... 159
Stosowanie opcji auto_prepend_file i auto_append_file .................................................. 159
Stosowanie funkcji w PHP................................................................................................. 160
Wywoywanie funkcji.................................................................................................. 160
Wywoanie niezdefiniowanej funkcji .......................................................................... 162
Wielko liter a nazwy funkcji..................................................................................... 163
Dlaczego powinno si definiowa wasne funkcje? ........................................................... 163
Podstawowa struktura funkcji ............................................................................................ 164
Nadawanie nazwy funkcji............................................................................................ 165
Parametry ........................................................................................................................... 166
Zasig................................................................................................................................. 168
Przekazanie przez referencj czy przekazanie przez warto? ........................................... 170
Powrt z funkcji................................................................................................................. 171
Zwracanie wartoci przez funkcje...................................................................................... 172
Bloki kodu ................................................................................................................... 173
Implementacja rekurencji................................................................................................... 174
Propozycje dalszych lektur ................................................................................................ 176
W nastpnym rozdziale ...................................................................................................... 176

Rozdzia 6.

" 
Koncepcje programowania obiektowego ........................................................................... 178
Klasy i obiekty............................................................................................................. 178
Polimorfizm ................................................................................................................. 179
Dziedziczenie............................................................................................................... 180
Tworzenie klas, atrybutw i operacji w PHP ..................................................................... 180
Struktura klasy ............................................................................................................. 180
Konstruktory................................................................................................................ 181
Destruktory .................................................................................................................. 181
Tworzenie egzemplarzy ..................................................................................................... 182
Stosowanie atrybutw klasy............................................................................................... 182
Kontrolowanie dostpu przy uyciu private i public.......................................................... 184

Spis treci

Wywoywanie operacji klas ............................................................................................... 185


Implementacja dziedziczenia w PHP ................................................................................. 186
Kontrolowanie widocznoci w trakcie dziedziczenia przy uyciu private i protected......187
Uniewanianie ............................................................................................................. 188
Zapobieganie dziedziczeniu i uniewanianiu przy uyciu final ................................... 190
Wielodziedziczenie...................................................................................................... 190
Implementowanie interfejsw...................................................................................... 191
Tworzenie klas ................................................................................................................... 192
Tworzenie kodu dla wasnej klasy ..................................................................................... 193
Zaawansowane i nowe mechanizmy obiektowe w PHP5................................................... 200
PHP4 a PHP5............................................................................................................... 200
Uywanie staych klasowych ....................................................................................... 201
Implementowanie metod statycznych .......................................................................... 201
Sprawdzanie typu klasy i wskazywanie typu............................................................... 201
Klonowanie obiektw .................................................................................................. 202
Uywanie klas abstrakcyjnych..................................................................................... 203
Przecianie metod przy uyciu __call() ..................................................................... 203
Uywanie metody __autoload()................................................................................... 204
Implementowanie iteratorw i iteracji ......................................................................... 205
Przeksztacanie klas w acuchy znakw..................................................................... 207
Uywanie API Reflection ............................................................................................ 207
W nastpnym rozdziale ...................................................................................................... 208

Rozdzia 7.

"'+&, $
Koncepcja obsugi wyjtkw ............................................................................................. 209
Klasa Exception ................................................................................................................. 211
Wyjtki definiowane przez uytkownika ........................................................................... 212
Wyjtki w Czciach samochodowych Janka .................................................................... 214
Wyjtki i inne mechanizmy obsugi bdw w PHP .......................................................... 217
Propozycje dalszych lektur ................................................................................................ 218
W nastpnym rozdziale ...................................................................................................... 218





 

-

++"

Koncepcje relacyjnych baz danych .................................................................................... 222
Tabele .......................................................................................................................... 222
Kolumny ...................................................................................................................... 222
Wiersze ........................................................................................................................ 223
Wartoci....................................................................................................................... 223
Klucze.......................................................................................................................... 223
Schematy ..................................................................................................................... 224
Relacje ......................................................................................................................... 224
Jak zaprojektowa internetow baz danych? .................................................................... 225
Okrel obiekty wiata realnego, ktrych model chcesz wykona ................................ 225
Unikaj przechowywania redundantnych danych.......................................................... 226
Zapisuj atomowe wartoci kolumn .............................................................................. 228
Dobierz waciwe klucze ............................................................................................. 228
Pomyl o zapytaniach, ktre zadasz bazie ................................................................... 229
Unikaj tworzenia tabel z wieloma pustymi polami ...................................................... 229
Typy tabel podsumowanie ...................................................................................... 230
Architektura internetowej bazy danych.............................................................................. 230
Architektura ................................................................................................................. 230
Propozycje dalszych lektur ................................................................................................ 232
W nastpnym rozdziale ...................................................................................................... 232

10

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty



.+"

Uytkowanie monitora MySQL ......................................................................................... 235
Logowanie si do serwera MySQL .................................................................................... 235
Tworzenie baz i rejestrowanie uytkownikw ................................................................... 237
Tworzenie bazy danych ............................................................................................... 237
Definiowanie uytkownikw i przywilejw ...................................................................... 237
Wprowadzenie do systemu przywilejw MySQL.............................................................. 237
Zasada najmniejszego przywileju ................................................................................ 238
Rejestrowanie uytkownikw: polecenie GRANT ...................................................... 238
Typy i poziomy przywilejw ....................................................................................... 240
Polecenie REVOKE..................................................................................................... 242
Przykady uycia polece GRANT i REVOKE........................................................... 242
Rejestrowanie uytkownika czcego si z Internetu ....................................................... 243
Wylogowanie si uytkownika root............................................................................. 244
Uywanie odpowiedniej bazy danych................................................................................ 244
Tworzenie tabel bazy danych............................................................................................. 244
Znaczenie dodatkowych atrybutw kolumn ................................................................ 246
Typy kolumn................................................................................................................ 246
Rzut oka na baz danych polecenia SHOW i DESCRIBE...................................... 249
Tworzenie indeksw .................................................................................................... 249
Uwaga na temat typw tabel........................................................................................ 250
Identyfikatory MySQL....................................................................................................... 250
Wybr typw danych w kolumnach................................................................................... 251
Typy liczbowe ............................................................................................................. 252
Propozycje dalszych lektur ................................................................................................ 256
W nastpnym rozdziale ...................................................................................................... 256

 $  "&


%!/0 
Czym jest SQL? ................................................................................................................. 257
Zapisywanie danych do bazy ............................................................................................. 258
Wyszukiwanie danych w bazie .......................................................................................... 260
Wyszukiwanie danych speniajcych okrelone kryteria ............................................. 262
Wyszukiwanie danych w wielu tabelach ..................................................................... 263
Szeregowanie danych w okrelonym porzdku ........................................................... 269
Grupowanie i agregowanie danych.............................................................................. 269
Wskazanie wierszy, ktre maj by wywietlone ........................................................ 271
Uywanie podzapyta.................................................................................................. 272
Dokonywanie zmian rekordw w bazie danych................................................................. 274
Zmiana struktury istniejcych tabel ................................................................................... 275
Usuwanie rekordw z bazy danych.................................................................................... 277
Usuwanie tabel................................................................................................................... 278
Usuwanie caych baz danych ............................................................................................. 278
Propozycje dalszych lektur ................................................................................................ 278
W nastpnym rozdziale ...................................................................................................... 278

 1& 2"&%!/0( & 


Jak dziaa internetowa baza danych?.................................................................................. 280
Wykonywanie zapyta do bazy danych z poziomu strony WWW ....................................... 282
Sprawdzenie poprawnoci wpisanych danych ................................................................... 283
Ustanawianie poczenia z baz danych .............................................................................. 284
Wybr waciwej bazy danych........................................................................................... 286
Wysyanie zapyta do bazy danych ................................................................................... 286
Odczytywanie rezultatw zapyta ..................................................................................... 287
Zamykanie poczenia z baz danych ................................................................................ 288
Wstawianie nowych danych do bazy ................................................................................. 288

Spis treci

11

Uywanie instrukcji przygotowywanych ........................................................................... 292


Uywanie innych interfejsw bazodanowych PHP............................................................ 293
Stosowanie oglnego interfejsu bazodanowego: PEAR DB .............................................. 294
Propozycje dalszych lektur ................................................................................................ 297
W nastpnym rozdziale ...................................................................................................... 297

 (%!/0#

Szczegy systemu przywilejw ........................................................................................ 299
Tabela user................................................................................................................... 300
Tabele db i host............................................................................................................ 302
Tabele tables_priv i columns_priv............................................................................... 302
Kontrola dostpu: w jaki sposb MySQL uywa tabel przywilejw ........................... 304
Zmiana przywilejw: kiedy zmiany zostan uwzgldnione? ....................................... 305
Ochrona bazy danych......................................................................................................... 305
MySQL z perspektywy systemu operacyjnego ............................................................ 305
Hasa ............................................................................................................................ 306
Przywileje uytkownikw............................................................................................ 307
MySQL i Internet......................................................................................................... 307
Uzyskiwanie szczegowych informacji o bazie danych ................................................... 308
Uzyskiwanie informacji poleceniem SHOW ............................................................... 308
Uzyskiwanie informacji o kolumnach za pomoc polecenia DESCRIBE ...................... 310
Jak wykonywane s zapytania: polecenie EXPLAIN .................................................. 311
Przyspieszanie wykonania zapyta za pomoc indeksw .................................................. 315
Optymalizowanie bazy danych .......................................................................................... 316
Optymalizacja projektu bazy danych ........................................................................... 316
Przywileje .................................................................................................................... 316
Optymalizacja tabel ..................................................................................................... 316
Stosowanie indeksw................................................................................................... 317
Uywanie wartoci domylnych .................................................................................. 317
Wicej wskazwek ...................................................................................................... 317
Tworzenie kopii zapasowej bazy danych MySQL ............................................................. 317
Przywracanie bazy danych MySQL ................................................................................... 318
Implementowanie replikacji............................................................................................... 318
Konfigurowanie serwera nadrzdnego......................................................................... 319
Transfer danych pocztkowych ................................................................................... 320
Konfigurowanie odbiorcy lub odbiorcw .................................................................... 321
Propozycje dalszych lektur ................................................................................................ 321
W nastpnym rozdziale ...................................................................................................... 321

  3'(%!/0  
Instrukcja LOAD DATA INFILE ...................................................................................... 323
Maszyny zapisu.................................................................................................................. 324
Transakcje.......................................................................................................................... 325
Definicje dotyczce transakcji ..................................................................................... 325
Uycie transakcji w InnoDB........................................................................................ 326
Klucze obce........................................................................................................................ 327
Procedury skadowane ....................................................................................................... 328
Prosty przykad ............................................................................................................ 329
Zmienne lokalne .......................................................................................................... 331
Kursory i struktury sterujce........................................................................................ 332
Propozycje dalszych lektur ................................................................................................ 335
W nastpnym rozdziale ...................................................................................................... 335

12

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty




 !"#
$

 4 5( + 


Co chcemy osign?......................................................................................................... 339
Rodzaje komercyjnych stron WWW.................................................................................. 339
Publikowanie informacji w broszurach internetowych ................................................ 340
Przyjmowanie zamwie na produkty i usugi ............................................................ 343
Dostarczanie usug lub wyrobw majcych posta cyfrow........................................ 348
Zwikszanie wartoci produktw i usug..................................................................... 348
Ograniczanie kosztw.................................................................................................. 349
Ryzyko i zagroenia........................................................................................................... 350
Crackerzy..................................................................................................................... 350
Przycignicie niewystarczajcej liczby klientw ....................................................... 351
Awarie sprztu komputerowego .................................................................................. 351
Awarie sieci elektrycznych, komunikacyjnych i komputerowych
oraz systemu wysykowego ...................................................................................... 351
Silna konkurencja ........................................................................................................ 352
Bdy w oprogramowaniu............................................................................................ 352
Zmiany polityki rzdowej ............................................................................................ 352
Ograniczenie pojemnoci systemw ............................................................................ 353
Wybr strategii................................................................................................................... 353
W nastpnym rozdziale ...................................................................................................... 353

  6 7( +


 
Jak wag maj posiadane przez nas informacje?.............................................................. 356
Zagroenia bezpieczestwa................................................................................................ 356
Ujawnienie informacji poufnych ................................................................................. 357
Utrata lub zniszczenie danych...................................................................................... 359
Modyfikacje danych .................................................................................................... 360
Blokada usugi ............................................................................................................. 361
Bdy w oprogramowaniu............................................................................................ 362
Zaprzeczenie korzystania z usugi ............................................................................... 363
Uyteczno, wydajno, koszty i bezpieczestwo............................................................ 364
Opracowanie polityki bezpieczestwa ............................................................................... 364
Zasady uwierzytelniania .................................................................................................... 365
Wykorzystanie mechanizmu uwierzytelniania................................................................... 366
Podstawy szyfrowania........................................................................................................ 367
Szyfrowanie z kluczem prywatnym ................................................................................... 368
Szyfrowanie z kluczem publicznym................................................................................... 369
Podpis cyfrowy .................................................................................................................. 370
Certyfikaty cyfrowe ........................................................................................................... 371
Bezpieczne serwery WWW ............................................................................................... 372
Monitorowanie i zapisywanie zdarze ............................................................................... 373
Zapory sieciowe ................................................................................................................. 374
Tworzenie kopii zapasowych ............................................................................................. 374
Tworzenie kopii zapasowych zwykych plikw .......................................................... 375
Tworzenie kopii zapasowych i odzyskiwanie baz danych MySQL ............................. 375
Bezpieczestwo fizyczne ................................................................................................... 375
W nastpnym rozdziale ...................................................................................................... 376

 8 9#) %!/0 


Identyfikacja uytkownikw .............................................................................................. 377
Implementacja kontroli dostpu......................................................................................... 378
Przechowywanie hase dostpu.................................................................................... 381
Szyfrowanie hase ........................................................................................................ 383
Zastrzeganie wicej ni jednej strony .......................................................................... 385

Spis treci

13

Podstawowa metoda uwierzytelniania ............................................................................... 386


Wykorzystanie podstawowej metody uwierzytelniania w PHP ......................................... 387
Wykorzystanie podstawowej metody uwierzytelniania na serwerze Apache
przy uyciu plikw .htaccess .......................................................................................... 389
Wykorzystanie podstawowej metody uwierzytelniania na serwerze IIS............................ 393
Wykorzystanie moduu mod_auth_mysql do celw uwierzytelniania ............................... 395
Instalacja moduu mod_auth_mysql ............................................................................ 395
Zadziaao?................................................................................................................... 396
Praca z mod_auth_mysql ............................................................................................. 396
Implementacja wasnej metody uwierzytelniania............................................................... 397
Propozycje dalszych lektur ................................................................................................ 398
W nastpnym rozdziale ...................................................................................................... 398

  3"  +) %!/0 


Zapewnienie bezpieczestwa transakcji................................................................................ 399
Komputer uytkownika................................................................................................ 400
Internet......................................................................................................................... 402
System docelowy ......................................................................................................... 403
Wykorzystanie protokou Secure Sockets Layer (SSL)........................................................ 404
Kontrola danych pochodzcych od uytkownika............................................................... 407
Bezpieczne przechowywanie danych................................................................................. 408
Ustalanie, czy powinno si przechowywa numery kart kredytowych .............................. 410
Szyfrowanie danych w PHP............................................................................................... 410
Propozycje dalszych lektur ................................................................................................ 419
W nastpnej czci ............................................................................................................. 419

%

& 
 '()

 - : +((#,( 4 


Wprowadzenie do wysyania plikw ................................................................................. 423
Kod HTML sucy do wysyania plikw ................................................................... 424
Uwaga na temat bezpieczestwa.................................................................................. 425
Tworzenie PHP obsugujcego plik............................................................................. 425
Najczciej spotykane problemy.................................................................................. 429
Stosowanie funkcji katalogowych...................................................................................... 430
Odczyt z katalogw ..................................................................................................... 430
Otrzymywanie informacji na temat aktualnego katalogu............................................. 432
Tworzenie i usuwanie katalogw................................................................................. 432
Interakcja z systemem plikw ............................................................................................ 433
Otrzymywanie informacji o pliku ................................................................................ 433
Zmiana waciwoci pliku ........................................................................................... 435
Tworzenie, usuwanie i przenoszenie plikw................................................................ 436
Stosowanie funkcji uruchamiajcych programy................................................................. 437
Interakcja ze rodowiskiem: funkcje getenv() i putenv() ................................................... 439
Propozycje dalszych lektur ................................................................................................ 440
W nastpnym rozdziale ...................................................................................................... 440

 !* +  44


Przegld protokow .......................................................................................................... 441
Wysyanie i odczytywanie poczty elektronicznej .............................................................. 442
Korzystanie z innych usug WWW .................................................................................... 442
Stosowanie funkcji pocze sieciowych .............................................................................. 446

14

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty

Korzystanie z FTP.............................................................................................................. 450


Stosowanie FTP w celu utworzenia kopii bezpieczestwa lub kopii lustrzanej pliku ....450
Wysyanie plikw ........................................................................................................ 456
Unikanie przekroczenia dopuszczalnego czasu ........................................................... 457
Stosowanie innych funkcji FTP ................................................................................... 457
Propozycje dalszych lektur ................................................................................................ 458
W nastpnym rozdziale ...................................................................................................... 458

 $ 3&& ( 4


Uzyskiwanie informacji o dacie i czasie w PHP ................................................................ 459
Stosowanie funkcji date() ............................................................................................ 459
Obsuga znacznikw czasu Uniksa .............................................................................. 461
Stosowanie funkcji getdate()........................................................................................ 462
Sprawdzanie poprawnoci dat...................................................................................... 463
Konwersja pomidzy formatami daty PHP i MySQL ........................................................ 464
Obliczanie dat w PHP ........................................................................................................ 465
Obliczanie dat w MySQL................................................................................................... 466
Stosowanie mikrosekund ................................................................................................... 468
Stosowanie funkcji kalendarzowych .................................................................................. 468
Propozycje dalszych lektur ................................................................................................ 469
W nastpnym rozdziale ...................................................................................................... 469

 ;", 4
Konfigurowanie obsugi obrazkw w PHP ........................................................................ 472
Formaty obrazkw ............................................................................................................. 473
JPEG ............................................................................................................................ 473
PNG ............................................................................................................................. 473
WBMP......................................................................................................................... 474
GIF............................................................................................................................... 474
Tworzenie obrazkw.......................................................................................................... 475
Tworzenie kadru obrazka............................................................................................. 476
Rysowanie lub umieszczanie tekstu w obrazku ........................................................... 476
Wywietlanie ostatecznej grafiki ................................................................................. 478
Kocowe czynnoci porzdkujce ............................................................................... 479
Stosowanie automatycznie generowanych obrazkw na innych stronach.......................... 480
Stosowanie tekstu i czcionek do tworzenia obrazkw............................................................ 480
Konfiguracja podstawowego kadru ............................................................................. 484
Dopasowanie tekstu do przycisku................................................................................ 484
Nadawanie tekstowi odpowiedniej pozycji.................................................................. 487
Wpisywanie tekstu do przycisku.................................................................................. 488
Etap kocowy .............................................................................................................. 488
Rysowanie figur i wykresw danych ................................................................................. 488
Inne funkcje obrazkw....................................................................................................... 495
Propozycje dalszych lektur ................................................................................................ 496
W nastpnym rozdziale ...................................................................................................... 496

 !#+ 4 
Czym jest kontrola sesji? ................................................................................................... 497
Podstawowa zasada dziaania sesji .................................................................................... 498
Czym jest cookie?........................................................................................................ 498
Konfiguracja cookies w PHP ....................................................................................... 498
Stosowanie cookies w sesji.......................................................................................... 499
Przechowywanie identyfikatora sesji........................................................................... 500

Spis treci

15

Implementacja prostych sesji ............................................................................................. 500


Rozpoczynanie sesji..................................................................................................... 500
Zgaszanie zmiennych sesji.......................................................................................... 501
Stosowanie zmiennych sesji ........................................................................................ 501
Usuwanie zmiennych i niszczenie sesji ....................................................................... 502
Przykad prostej sesji ......................................................................................................... 502
Konfiguracja kontroli sesji................................................................................................. 504
Implementacja uwierzytelniania w kontroli sesji ............................................................... 505
Propozycje dalszych lektur ................................................................................................ 511
W nastpnym rozdziale ...................................................................................................... 511

  :<   
Stosowanie magicznych cudzysoww .............................................................................. 513
Wykonywanie cigw funkcja eval()............................................................................ 514
Zakoczenie wykonania die i exit ................................................................................. 515
Serializacja zmiennych i obiektw..................................................................................... 516
Pobieranie informacji na temat rodowiska PHP ............................................................... 517
Uzyskiwanie informacji na temat zaadowanych rozszerze ....................................... 517
Identyfikacja waciciela skryptu................................................................................. 518
Uzyskiwanie informacji na temat daty modyfikacji skryptu........................................ 518
Dynamiczne dodawanie rozszerze ................................................................................... 518
Czasowa zmiana rodowiska wykonawczego .................................................................... 519
Podwietlanie rde .......................................................................................................... 520
Uywanie PHP w wierszu polece..................................................................................... 520
W nastpnej czci ............................................................................................................. 521

%

*
" ( '"
+( ,  -

 4 !%!/0)
+
 
Zastosowanie inynierii oprogramowania w tworzeniu aplikacji WWW .......................... 526
Planowanie i prowadzenie projektu aplikacji WWW......................................................... 526
Ponowne stosowanie kodu ................................................................................................. 527
Tworzenie kodu atwego w utrzymaniu ............................................................................. 528
Standardy kodowania................................................................................................... 528
Dzielenie kodu............................................................................................................. 531
Stosowanie standardowej struktury katalogw ............................................................ 532
Dokumentacja i dzielenie wewntrznych funkcji ........................................................ 532
Implementacja kontroli wersji............................................................................................ 533
Wybr rodowiska programistycznego .............................................................................. 534
Dokumentacja projektw ................................................................................................... 534
Prototypowanie .................................................................................................................. 535
Oddzielanie logiki i zawartoci .......................................................................................... 536
Optymalizacja kodu ........................................................................................................... 537
Stosowanie prostych optymalizacji.............................................................................. 537
Stosowanie produktw firmy Zend.............................................................................. 538
Testowanie ......................................................................................................................... 538
Propozycje dalszych lektur ................................................................................................ 540
W nastpnym rozdziale ...................................................................................................... 540

  9"2, 4
Bdy programistyczne ...................................................................................................... 541
Bdy skadni ............................................................................................................... 542
Bdy wykonania ......................................................................................................... 543
Bdy logiczne ............................................................................................................. 548

16

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty

Pomoc w usuwaniu bdw w zmiennych.......................................................................... 550


Poziomy zgaszania bdw ............................................................................................... 552
Zmiana ustawie zgaszania bdw .................................................................................. 553
Wyzwalanie wasnych bdw ........................................................................................... 554
Elegancka obsuga bdw................................................................................................. 555
W nastpnym rozdziale ...................................................................................................... 557

 8 .#),# + 
Problem.............................................................................................................................. 559
Skadniki rozwizania ........................................................................................................ 560
Identyfikacja uytkownika i personalizacja ................................................................. 560
Przechowywanie zakadek ........................................................................................... 561
Rekomendowanie zakadek ......................................................................................... 561
Przegld rozwizania ......................................................................................................... 561
Implementacja bazy danych............................................................................................... 563
Implementacja podstawowej witryny................................................................................. 565
Implementacja uwierzytelniania uytkownikw ................................................................ 567
Rejestracja ................................................................................................................... 567
Logowanie ................................................................................................................... 573
Wylogowanie............................................................................................................... 576
Zmiana hasa................................................................................................................ 577
Ustawianie zapomnianych hase .................................................................................. 579
Implementacja przechowywania i odczytywania zakadek ................................................ 584
Dodawanie zakadek .................................................................................................... 584
Wywietlanie zakadek ................................................................................................ 586
Usuwanie zakadek ...................................................................................................... 587
Implementacja rekomendacji ............................................................................................. 589
Rozwijanie projektu i moliwe rozszerzenia...................................................................... 592
W nastpnym rozdziale ...................................................................................................... 592

  .  
Problem.............................................................................................................................. 593
Skadniki rozwizania ........................................................................................................ 594
Tworzenie katalogu online........................................................................................... 594
ledzenie zakupw uytkownika podczas przegldania................................................... 594
Implementacja systemu patnoci ................................................................................ 594
Interfejs administratora ................................................................................................ 595
Przegld rozwizania ......................................................................................................... 595
Implementacja bazy danych............................................................................................... 599
Implementacja katalogu online .......................................................................................... 601
Przedstawianie kategorii .............................................................................................. 603
Wywietlanie ksiek danej kategorii.......................................................................... 605
Przedstawianie szczegowych danych ksiki ........................................................... 607
Implementacja koszyka na zakupy..................................................................................... 608
Stosowanie skryptu pokaz_kosz.php ........................................................................... 608
Podgld koszyka .......................................................................................................... 611
Dodawanie produktw do koszyka .............................................................................. 614
Zapisywanie uaktualnionego koszyka.......................................................................... 615
Wywietlanie podsumowania w pasku nagwka ........................................................ 616
Pobyt w kasie............................................................................................................... 616
Implementacja patnoci .................................................................................................... 622
Implementacja interfejsu administratora ............................................................................ 624
Rozwijanie projektu ........................................................................................................... 631
Zastosowanie istniejcego systemu.................................................................................... 632
W nastpnym rozdziale ...................................................................................................... 632

Spis treci

17

 - .(&< & 8


Problem.............................................................................................................................. 633
Wymagania systemu .......................................................................................................... 634
Istniejce systemy .............................................................................................................. 634
Edycja zawartoci .............................................................................................................. 634
Umieszczanie zawartoci w systemie .......................................................................... 635
Bazy danych czy pliki? ................................................................................................ 636
Struktura dokumentu ................................................................................................... 636
Stosowanie metadanych ..................................................................................................... 636
Formatowanie danych wyjciowych .................................................................................. 637
Projekt/przegld rozwizania ............................................................................................. 638
Projektowanie bazy danych................................................................................................ 639
Implementacja systemu zarzdzania zawartoci............................................................... 641
Fronton systemu........................................................................................................... 641
Wntrze systemu.......................................................................................................... 648
Wyszukiwanie.............................................................................................................. 656
Ekran redaktora naczelnego......................................................................................... 659
Rozwijanie projektu ........................................................................................................... 661
W nastpnym rozdziale ...................................................................................................... 661

 . # +' 88


Problem.............................................................................................................................. 663
Skadniki rozwizania ........................................................................................................ 664
Przegld rozwizania ......................................................................................................... 666
Konfiguracja bazy danych.................................................................................................. 667
Architektura skryptu .......................................................................................................... 669
Logowanie i wylogowanie ................................................................................................. 674
Konfiguracja kont .............................................................................................................. 677
Tworzenie nowego konta............................................................................................. 679
Modyfikacja istniejcego konta ................................................................................... 681
Usuwanie konta ........................................................................................................... 681
Odczytywanie poczty......................................................................................................... 682
Wybr konta ................................................................................................................ 682
Przegldanie zawartoci skrzynki ................................................................................ 684
Odczytywanie wiadomoci pocztowych ...................................................................... 687
Przegldanie nagwkw wiadomoci ......................................................................... 690
Usuwanie wiadomoci ................................................................................................. 690
Wysyanie wiadomoci ...................................................................................................... 692
Wysyanie nowej wiadomoci ..................................................................................... 692
Odpowiadanie i przekazywanie poczty........................................................................ 694
Rozwijanie projektu ........................................................................................................... 695
W nastpnym rozdziale ...................................................................................................... 696

$ .()# 


8 
Problem.............................................................................................................................. 697
Skadniki rozwizania ........................................................................................................ 698
Konfiguracja bazy danych list i abonentw ................................................................. 698
Wysyanie plikw ........................................................................................................ 699
Wysyanie wiadomoci z zacznikami........................................................................ 699
Przegld rozwizania ......................................................................................................... 699
Konfiguracja bazy danych.................................................................................................. 701
Architektura skryptu .......................................................................................................... 704
Implementacja logowania .................................................................................................. 711
Tworzenie nowego konta............................................................................................. 711
Logowanie ................................................................................................................... 714

18

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty

Implementacja funkcji uytkownika .................................................................................. 716


Przegldanie list........................................................................................................... 717
Przegldanie informacji na temat listy ......................................................................... 721
Przegldanie archiwum listy ........................................................................................ 723
Zapisywanie i wypisywanie......................................................................................... 724
Zmiana konfiguracji konta........................................................................................... 726
Zmiana hasa................................................................................................................ 726
Wylogowanie............................................................................................................... 728
Implementacja funkcji administratora................................................................................ 728
Tworzenie nowej listy.................................................................................................. 729
Wysyanie nowych wiadomoci................................................................................... 731
Obsuga wysyania wielu plikw ................................................................................. 734
Podgld wiadomoci .................................................................................................... 737
Rozsyanie wiadomoci ............................................................................................... 738
Rozwijanie projektu ........................................................................................................... 744
W nastpnym rozdziale ...................................................................................................... 745

 .*( 4


Problem.............................................................................................................................. 747
Skadniki rozwizania ........................................................................................................ 748
Przegld rozwizania ......................................................................................................... 749
Projektowanie bazy danych................................................................................................ 751
Przegldanie drzewa artykuw ......................................................................................... 753
Rozwijanie i zwijanie................................................................................................... 755
Wywietlanie artykuw .............................................................................................. 758
Korzystanie z klasy wezel_drzewa .............................................................................. 759
Przegldanie pojedynczych artykuw ............................................................................... 765
Dodawanie nowych artykuw........................................................................................... 767
Rozszerzenia ...................................................................................................................... 773
Wykorzystanie istniejcego systemu.................................................................................. 773
W nastpnym rozdziale ...................................................................................................... 774

 .(,#
*( => 
Problem.............................................................................................................................. 775
Ocena formatw dokumentw ..................................................................................... 776
Skadniki rozwizania ........................................................................................................ 780
System pyta i odpowiedzi .......................................................................................... 781
Oprogramowanie generujce dokumenty..................................................................... 781
Przegld rozwizania ......................................................................................................... 784
Zadawanie pyta.......................................................................................................... 785
Ocena odpowiedzi ....................................................................................................... 786
Tworzenie certyfikatu RTF.......................................................................................... 789
Tworzenie certyfikatu PDF z szablonu ........................................................................ 792
Generowanie dokumentu PDF za pomoc PDFlib....................................................... 795
Skrypt Witaj wiecie dla PDFlib .............................................................................. 796
Tworzenie certyfikatu za pomoc PDFlib.................................................................... 800
Problemy zwizane z nagwkami ..................................................................................... 807
Rozwijanie projektu ........................................................................................................... 807
Propozycje dalszych lektur ................................................................................................ 807
W nastpnym rozdziale ...................................................................................................... 808

 5' 


( &?%0! -$
Problem.............................................................................................................................. 809
Podstawy XML............................................................................................................ 810
Podstawy usug sieciowych ......................................................................................... 814

Spis treci

19

Skadniki rozwizania ........................................................................................................ 816


Konstrukcja koszyka na zakupy................................................................................... 816
Korzystanie z interfejsu usug sieciowych Amazon.com............................................. 816
Wczytywanie dokumentw XML................................................................................ 817
Korzystanie z SOAP za pomoc PHP.......................................................................... 817
Buforowanie ................................................................................................................ 818
Opis rozwizania................................................................................................................ 818
Aplikacja gwna ......................................................................................................... 821
Wywietlanie listy ksiek z danej kategorii ............................................................... 827
Tworzenie obiektu klasy WynikiWyszukiwania.......................................................... 829
Korzystanie z REST/przesyania dokumentw XML .................................................. 835
Korzystanie z protokou SOAP.................................................................................... 840
Buforowanie danych .................................................................................................... 841
Konstrukcja koszyka na zakupy................................................................................... 843
Przejcie do kasy na witrynie Amazon.com................................................................. 846
Instalacja kodu rdowego................................................................................................ 847
Kierunki rozwoju ............................................................................................................... 847
Literatura............................................................................................................................ 848

.
/ ( 0)
=

:# +%!/0 -
Uruchamianie PHP jako CGI lub moduu serwera............................................................. 852
Instalacja Apache, PHP i MySQL w systemie UNIX ........................................................ 852
Instalacja przy uyciu binariw ................................................................................... 852
Instalacja przy uyciu kodw rdowych ................................................................... 853
Plik httpd.conf informacje kocowe ....................................................................... 859
Czy obsuga PHP dziaa poprawnie? ........................................................................... 860
Czy SSL dziaa poprawnie? ......................................................................................... 861
Instalacja Apache, PHP i MySQL w systemie Windows ................................................... 862
Instalacja MySQL w systemie Windows ..................................................................... 862
Instalacja serwera Apache w systemie Windows......................................................... 866
Instalacja PHP w systemie Windows........................................................................... 868
Instalowanie PEAR............................................................................................................ 871
Inne konfiguracje ............................................................................................................... 872

=6

3" -
Zasoby powicone PHP.................................................................................................... 873
Zasoby powicone MySQL i SQL.................................................................................... 875
Zasoby powicone serwerowi Apache ............................................................................. 876
Zasoby powicone tworzeniu stron WWW ...................................................................... 876

! -

Rozdzia 9.

 


  
W rozdziale tym przedstawimy sposb tworzenia bazy danych MySQL, przeznaczonej do
udostpniania na stronach WWW.
W tym rozdziale zostan poruszone nastpujce zagadnienia:
 tworzenie bazy danych,
 definiowanie uytkownikw i przywilejw,
 wprowadzenie do systemu przywilejw,
 tworzenie tabel bazy danych,
 tworzenie indeksw,
 wybieranie typw kolumn w MySQL.

Rwnie i w tym rozdziale posuymy si znanym ju przykadem ksigarni internetowej


Ksikorama. Przypomnijmy schemat jej bazy danych:

  
 



    ! "
#!$ 
 
%$   %

Naley rwnie przypomnie, i nazwy pl bdcych kluczami podstawowymi s podkrelone lini cig, a nazwy pl bdcych kluczami obcymi lini przerywan.
W celu przeanalizowania materiau zawartego w tym rozdziale naley zapewni sobie
dostp do serwera MySQL, co oznacza, e:
 Trzeba przeprowadzi instalacj MySQL na serwerze WWW, obejmujc

nastpujce czynnoci:
 instalacj plikw,
 rejestracj uytkownika na serwerze MySQL,

234

Cz II  Stosowanie MySQL
 zdefiniowanie odpowiedniej cieki dostpu,
 w razie koniecznoci uruchomienie aplikacji !&$$',
 okrelenie hasa administratora,
 usunicie uytkownika anonimowego,
 uruchomienie serwera MySQL po raz pierwszy i skonfigurowanie go w taki

sposb, by uruchamia si automatycznie.


Po wykonaniu wymienionych czynnoci mona przystpi do lektury tego rozdziau.
Jeli jednak instalacja nie powioda si, naley kierowa si instrukcjami zawartymi
w dodatku A.
Ewentualne bdy, ktre mog wystpi w trakcie wykonywania czynnoci
opisywanych w tym rozdziale, spowodowane bd prawdopodobnie nieprawidow
prac serwera MySQL. W takim przypadku naley ponownie przeanalizowa
czynnoci opisane powyej oraz przedstawione w dodatku A w celu upewnienia
si, i MySQL zosta prawidowo zainstalowany.
 Naley zapewni sobie dostp do serwera MySQL zainstalowanego na komputerze

znajdujcym si w miejscu pracy czytelnika, udostpnianego przez dostawc usug


internetowych na zdalnym komputerze itp.
W takim przypadku wykonanie zawartych w tym rozdziale przykadw lub utworzenie
wasnej bazy danych wymaga zarejestrowania przez administratora odpowiedniego
uytkownika oraz znajomoci nadanego mu identyfikatora, hasa dostpu i nazwy
przypisanej mu bazy danych.
Nie jest konieczne zapoznanie si z treci podrozdziaw dotyczcych rejestrowania
uytkownikw i przydzielania im bazy danych, chyba e istnieje potrzeba bardziej
precyzyjnego wyjanienia administratorowi przedstawionych wczeniej wymaga.
Zwykli uytkownicy nie bd wszake mogli samodzielnie tworzy wasnych
uytkownikw i baz danych.
Wszystkie przykady zawarte w tym rozdziale byy uruchamiane na serwerze MySQL
w wersji 5.0, ktra w trakcie pisania tej ksiki bya wersj najnowsz. Niektre wczeniejsze wersje serwera nie posiadaj pewnych moliwoci, dlatego te przed rozpoczciem lektury naley zastpi starsz wersj now instalacj MySQL. Najnowsz wersj
serwera MySQL mona pobra ze strony http://mysql.com.
W ksice komunikacj z serwerem MySQL prowadzimy przy uyciu klienta wiersza
polece o nazwie MySQL monitor, stanowicego skadnik kadej instalacji. Nic jednak nie
stoi na przeszkodzie, by uywa innego klienta. Jeli na przykad uywany serwer MySQL
znajduje si na dzierawionym serwerze WWW, administratorzy systemu zwykle udostpniaj uytkownikom dziaajcy przez przegldark interfejs phpMyAdmin. Rne klienty
GUI dziaaj nieco inaczej, ni zostanie to przedstawione w tym rozdziale, lecz odpowiednie
zaadaptowanie przedstawionych instrukcji nie powinno sprawi wikszego kopotu.

Rozdzia 9.  Tworzenie internetowej bazy danych

235



 
W przykadach przedstawionych w dalszej czci tego rozdziau oraz w rozdziale nastpnym kada komenda jest zakoczona znakiem rednika ((). Informuje on serwer MySQL
o koniecznoci wykonania zadanego polecenia. Opuszczenie rednika spowoduje brak
reakcji serwera, o czym czsto zapominaj uytkownicy, zwaszcza niedowiadczeni.
Opuszczenie znaku rednika spowoduje, e nastpi przejcie do nowego wiersza przed
zakoczeniem wpisywania tekstu komendy. Pozwolio to nam na zwikszenie czytelnoci
przykadw. Odnalezienie miejsca, w ktrym nastpio przejcie do nowego wiersza, nie
powinno sprawi adnych problemw MySQL wywietli tam znak kontynuacji w formie
strzaki przedstawionej poniej:

  


Symbol ten oznacza, e MySQL czeka na wprowadzenie dalszej czci polecenia. Za


kadym razem, gdy zostanie nacinity klawisz Enter bez wczeniejszego wpisania znaku
rednika, nastpi przejcie do nowego wiersza i wywietlenie symbolu strzaki.
Warto rwnie zapamita, e MySQL nie rozrnia maych i wielkich liter w poleceniach jzyka SQL, moe natomiast je rozrnia w nazwach baz danych i tabel (kwestia
ta zostanie poruszona w dalszej czci rozdziau).



     
W celu zalogowania si do serwera MySQL naley przej do wiersza polece systemu
operacyjnego i wpisa nastpujc komend:

    
 

Polecenie !& wywouje monitor MySQL, majcy posta wiersza polece czcego
klienta z serwerem.
Opcji )* uywa si w celu wskazania komputera, do ktrego ma nastpi poczenie (na
maszynie tej pracuje serwer MySQL). Jeli polecenie to ma by wykonane na tym samym
komputerze, na ktrym znajduje si MySQL, to opcja )* oraz parametr 

mog zosta pominite. W przeciwnym wypadku konieczne jest wpisanie w miejsce parametru 
 nazwy maszyny, na ktrej uruchomiony jest serwer bazy danych.
Opcja ) jest stosowana w celu wskazania identyfikatora uytkownika, na ktrego nastpuje logowanie. Jeli identyfikator ten nie zostanie podany, wwczas MySQL domylnie
uyje identyfikatora tego uytkownika, ktry jest aktualnie zalogowany do systemu operacyjnego.
Jeli MySQL zosta zainstalowany na komputerze lub serwerze czytelnika, bdzie on zmuszony zalogowa si jako uytkownik  oraz samodzielnie utworzy baz danych, ktr bdzie wykorzystywa w trakcie uruchamiania zawartych w tym rozdziale przykadw.
Przy pierwszym uruchomieniu serwera uytkownik  jest jedynym zarejestrowanym

236

Cz II  Stosowanie MySQL

uytkownikiem. W trakcie pracy na serwerze zainstalowanym na komputerze administrowanym przez inn osob naley przy logowaniu uy identyfikatora uytkownika,
podanego przez administratora.
Opcja )+ informuje serwer o logowaniu si z uyciem hasa. Moe ona zosta pominita, jeli dla danego uytkownika haso nie zostao ustanowione.
Jeeli czytelnik loguje si jako uytkownik  bez koniecznoci podania hasa, zalecane jest okrelenie hasa dostpu zgodnie z instrukcjami zawartymi w dodatku A. Jego
brak powoduje, i system bdzie niedostatecznie zabezpieczony.
Podawanie hasa w tym samym wierszu co polecenie !& nie jest obowizkowe. Jeeli
nie zostanie ono podane, to serwer MySQL sam o nie zapyta. Tak naprawd pominicie hasa jest waciwie lepszym rozwizaniem, gdy wpisane w wierszu polece bdzie
miao form zwykego tekstu, co umoliwi osobom postronnym jego wykrycie.
Po wpisaniu komendy podanej na pocztku podrozdziau wywietlona zostanie odpowied
w nastpujcej formie:
 
 

(jeeli polecenie to nie zadziaa, trzeba sprawdzi, czy serwer MySQL jest uruchomiony, a komenda !& moe by zrealizowana w biecej ciece dostpu).
Nastpnie naley poda haso dostpu. Jeli wszystko przebiegnie prawidowo, powinien
zosta wywietlony komunikat podobny do poniszego:
         
  ! "
#    $  % %  &''


( )
* + !+ +"+,  * +"+ 
  ),, 


Jeeli czytelnik pracuje na wasnym komputerze i komunikat nie bdzie przypomina powyszego, wwczas naley upewni si, czy uruchomiona jest aplikacja !&$ $'
(jeeli jest wymagana) i czy zostao okrelone i wpisane prawidowo haso dostpu dla
uytkownika . Jeli praca odbywa si na zdalnej maszynie, trzeba upewni si, i
podane haso jest prawidowe.
Po zalogowaniu si do serwera kursor powinien znajdowa si przy znaku zachty, umoliwiajc stworzenie nowej bazy danych. Czytelnik pracujcy na wasnym komputerze
powinien stosowa si do instrukcji podanych w dalszej czci rozdziau. Czytelnik korzystajcy z maszyny administrowanej przez inn osob powinien mie utworzon i przypisan mu baz danych, moe wic od razu przej do lektury podrozdziau Uywanie
odpowiedniej bazy danych. Mona oczywicie zapozna si z poprzedzajcymi go podrozdziaami, nie bdzie jednak moliwoci (a przynajmniej nie powinno by) uruchamiania wyszczeglnionych w nich polece.

Rozdzia 9.  Tworzenie internetowej bazy danych

237



  


System baz danych MySQL jest w stanie obsugiwa wiele baz danych jednoczenie. Zazwyczaj jedna aplikacja wsppracuje z jedn baz danych. Dla ksigarni Ksikorama
baza ta nosi nazw .


  
Tworzenie bazy danych to czynno najprostsza. W wierszu polece MySQL naley
wpisa:
 

W miejsce  naley poda nazw bazy danych, ktra ma zosta utworzona. W naszym przykadzie jest to baza o nazwie .
I to wszystko! Otrzymana odpowied powinna wyglda mniej wicej tak:
 -./$ 
,,  0''1 2

Oznacza to, e operacja zostaa wykonana bez bdw. Jeli taki komunikat si nie pojawi,
naley upewni si, e na kocu komendy zosta wpisany znak rednika. Informuje on serwer MySQL o zakoczeniu wpisywania polecenia i o koniecznoci jego wykonania.

 






System MySQL moe obsugiwa wielu uytkownikw. Uytkownik  powinien by
wykorzystywany w zasadzie tylko do celw administracyjnych, co jest podyktowane wzgldami bezpieczestwa. Dla kadego uytkownika, ktry bdzie pracowa w systemie, trzeba
utworzy konto i nada mu haso dostpu. Nie musz one by takie same, jak identyfikator uytkownika i haso wykorzystywane do zalogowania si do systemu operacyjnego.
Ta sama zasada odnosi si do uytkownika . Podane jest stosowanie rnych hase dostpu w razie logowania si do systemu operacyjnego i serwera MySQL, szczeglnie w przypadku uytkownika .
Nadawanie hasa nowym uytkownikom nie jest obowizkowe, jednak ze wzgldw bezpieczestwa podane jest, aby kady uytkownik posiada wasne haso dostpu. W przypadku tworzenia internetowej bazy danych wskazane jest utworzenie co najmniej jednego
uytkownika, ktry bdzie wykorzystywany tylko przez dan aplikacj bazodanow. Mona
by zada pytanie o cel tej operacji. Odpowied zwizana jest z systemem przywilejw.

!
   
 
Jedn z najwaniejszych cech MySQL jest obsuga wyrafinowanego systemu przywilejw. Przywilej to inaczej posiadane przez okrelonego uytkownika prawo do wykonania okrelonego polecenia na okrelonym obiekcie. Idea przywilejw jest zbliona do
koncepcji praw dostpu do plikw. Rejestrujc nowego uytkownika MySQL, naley

238

Cz II  Stosowanie MySQL

nada mu odpowiednie przywileje w celu wyszczeglnienia czynnoci, ktre bdzie on


mg wykona w systemie.

     


Zasada najmniejszego przywileju jest stosowana w celu zwikszenia bezpieczestwa
systemu komputerowego. Jest to podstawowa, ale bardzo wana zasada, o ktrej niestety czsto si zapomina. Brzmi ona nastpujco:
Uytkownik (lub proces) powinien posiada minimalny zbir przywilejw
potrzebnych do wykonania przypisanego mu zadania.
Zasad t naley stosowa wszdzie, nie tylko w odniesieniu do MySQL. Na przykad do
wysania zapytania do bazy danych ze strony WWW uytkownik nie bdzie potrzebowa
wszystkich przywilejw, ktre posiada uytkownik . Naley wic utworzy nowego
uytkownika i nada mu tylko przywileje niezbdne do uzyskania dostpu do bazy danych.

      


Polecenia ,% i %-./- su do nadawania i odbierania uytkownikom MySQL praw na
czterech poziomach uprzywilejowania. Wyrniamy nastpujce poziomy przywilejw:
 globalny,
 baza danych,
 tabela,
 kolumna.

W dalszej czci rozdziau wyjanimy, ktry z nich i kiedy naley stosowa.


Polecenie ,% suy do tworzenia nowych uytkownikw i nadawania im przywilejw.
Skadnia tego polecenia jest nastpujca:
3456*   7
8
-6 
*-    
 79:6*9;9:<#++8
74=94  8
79*>73456*-?*9-6@  88

Klauzule w nawiasach kwadratowych s opcjonalne. Poniej zostan omwione poszczeglne parametry tego polecenia. Pierwszy z nich,   , ma posta listy przywilejw
oddzielonych przecinkami. MySQL posiada liczny zbir przywilejw, opisanych w nastpnym podrozdziale.
Parametr 
 jest opcjonalny. Uywa si go w celu wskazania kolumn, do ktrych
podane przywileje zostan zastosowane. Mona poda nazw pojedynczej kolumny lub
list nazw kolumn oddzielonych przecinkami.
Parametr   wskazuje baz lub tabel, do ktrej zostan zastosowane podane przywileje. W celu nadania przywilejw na wszystkie bazy danych w systemie   powinien przyj warto 010. Wwczas przywileje zostay nadane na poziomie globalnym.

Rozdzia 9.  Tworzenie internetowej bazy danych

239

Ten sam efekt mona osign, przypisujc parametrowi   warto 0, jeli nie jest
uywana adna baza danych. Czciej jednak wskazuje si wszystkie tabele w bazie,
wpisujc 10, konkretn tabel (  ) lub pojedyncze
kolumny w danej tabeli poprzez wpisanie    i nadanie odpowiedniej wartoci parametrowi 
. Za pomoc tych metod nadaje si przywileje na
pozostaych trzech poziomach uprzywilejowania, odpowiednio: baza danych, tabela
i kolumna. Jeeli w trakcie wykonywania tego polecenia uywana jest konkretna baza
danych, to podanie samej nazwy tabeli bdzie zinterpretowane jako nadanie przywilejw tabeli o tej nazwie, znajdujcej si w uywanej bazie danych.
Parametr     
  powinien wskazywa identyfikator, za pomoc ktrego uytkownik loguje si do serwera MySQL. Oczywicie nie musi by to ten sam,
ktry jest uywany przy logowaniu si do systemu operacyjnego. Warto tego parametru
moe rwnie zawiera nazw komputera. Moliwo t wykorzystuje si na przykad
do odrnienia uytkownika  (traktowanego jako 2*) od uytkownika 231. Rozwizanie to jest szczeglnie uyteczne w przypadku,
gdy uytkownicy z rnych domen maj te same identyfikatory. Poza tym metoda ta
zwiksza poziom bezpieczestwa systemu, gdy pozwala okreli, z jakiej domeny konkretny uytkownik moe si zalogowa, a nawet do jakich tabel lub baz ma on dostp
z okrelonej lokalizacji.
Wartoci parametru  jest haso dostpu, ktrym powinien posugiwa si wskazany
uytkownik w trakcie logowania do serwera. Stosuje si tutaj standardowe zasady doboru
hase. Kwestie bezpieczestwa zostan omwione w dalszej czci ksiki, jednak naley
zaznaczy, e haso nie powinno by atwe do odgadnicia. Niewskazane jest uywanie
sw, ktre mona znale w sowniku ani nie powinno by takie samo, jak identyfikator uytkownika. Najlepszym rozwizaniem jest nadanie hasa skadajcego si z liter
maych i wielkich oraz znakw nie bdcych literami.
Klauzula %-45 %- pozwala wskaza, e uytkownik musi czy si poprzez protok
Secure Sockets Layer (SSL), a take wskaza opcje SSL. Wicej informacji na temat
pocze z serwerem MySQL za porednictwem SSL mona znale w podrczniku
MySQL.
Dodanie opcji  6 ,% /# / spowoduje, e wskazany uytkownik bdzie mg nadawa innym uytkownikom takie przywileje, jakie sam posiada.
Zamiast niej mona uy klauzuli  6 w postaci
5AB=49B?4B>-=4

lub
5AB=?:5*B?4B>-=4

lub
5AB -66 *9-6B?4B>-=4

Dziki tym klauzulom mona ograniczy liczb zapyta, uaktualnie lub pocze, jakie
jeden uytkownik moe zrealizowa w cigu godziny. Rozwizanie to moe przyda si
do ograniczania obcienia systemw wspuytkowanych generowanego przez jednego
uytkownika.

240

Cz II  Stosowanie MySQL

Informacje dotyczce nadanych przywilejw zapamitywane s w czterech tabelach systemowych, znajdujcych si w bazie danych o nazwie !&. Tabele te nosz nazwy:
!&1, !&1', !&1*, !&1'$+7 oraz !&1$+7. Zamiast
wykorzystywa polecenie ,% , mona zmienia dane bezporednio w wymienionych
tabelach. Szczegowe informacje na temat sposobu dziaania tych tabel oraz metod
wprowadzania zmian bezporednio w nich zostan przedstawione w rozdziale 12.

     


MySQL wykorzystuje trzy typy przywilejw:
 przywileje nadawane zwykym uytkownikom,
 przywileje dla administratorw,
 przywileje specjalne.

Kademu uytkownikowi mona przyporzdkowa przywileje dowolnego typu, najrozsdniejsze jednak jest nadawanie przywilejw dla administratorw tylko administratorom
systemu, czyli zgodnie ze wspomnian wczeniej zasad najmniejszego przywileju.
Uytkownikom naley nadawa takie przywileje, ktre umoliwi korzystanie tylko z potrzebnych im baz i tabel. Nikomu, z wyjtkiem administratora, nie naley udostpnia systemowej bazy !&, gdy w niej wanie przechowywane s identyfikatory wszystkich
uytkownikw, ich hasa dostpu itp. (szerzej zagadnienie to jest opisane w rozdziale 12.).
Przywileje przeznaczone dla zwykych uytkownikw odwouj si bezporednio do konkretnych rodzajw polece SQL i okrelaj, czy dany uytkownik moe wykonywa polecenia tego typu. Polecenia jzyka SQL zostan szerzej omwione w nastpnym rozdziale,
teraz ograniczymy si tylko do krtkiego opisu (tabela 9.1). Kolumna Zastosowanie
wskazuje obiekty, ktrym moe by nadany okrelony typ przywilejw.
  Przywileje dla uytkownikw
Przywilej

Zastosowanie

Opis

 *

Tabele, kolumny

Pozwala na wyszukiwanie wierszy (rekordw) z tabel

964*

Tabele, kolumny

Pozwala na wstawianie nowych wierszy do tabel

=?:5*

Tabele, kolumny

Pozwala na zmian wartoci wierszy zapisanych w tabeli

:*

Tabele

Pozwala na usuwanie z tabeli istniejcych wierszy

96:A

Tabele

Pozwala na tworzenie i usuwanie indeksw w poszczeglnych tabelach

5*4

Tabele

Pozwala na dokonywanie zmian w strukturze istniejcych tabel,


np. dodawanie nowych kolumn, zmian nazw kolumn lub tabel,
zmian typu danych istniejcych kolumn

Bazy danych, tabele

Pozwala na tworzenie nowych tabel i baz danych. Jeeli w ramach


polecenia 3456* podano nazw konkretnej tabeli lub kolumny,
to uytkownik ma prawo utworzy tabel lub kolumn tylko o tej
nazwie, a wic najpierw bdzie zmuszony j usun

Bazy danych, tabele

Pozwala na usuwanie baz lub tabel

45*

:4-?

Rozdzia 9.  Tworzenie internetowej bazy danych

241

Wikszo przywilejw przeznaczonych dla zwykych uytkownikw nie powoduje zmniejszenia bezpieczestwa systemu. Przywilej 8 -% moe by wykorzystywany do obchodzenia systemu przywilejw poprzez zmian nazw tabel, jednak jest on potrzebny wikszoci
uytkownikw. Ochrona systemu jest zawsze rezultatem kompromisu midzy jego uytecznoci a poziomem zabezpiecze. Administrator powinien samodzielnie podejmowa
decyzj o nadaniu, lub nie, przywileju 8 -% zwykym uytkownikom. Zazwyczaj jednak
przywilej ten jest nadawany.
Oprcz przywilejw opisanych w tabeli 9.1 istnieje rwnie przywilej %-9-%- "- (obecnie
nie jest on praktycznie uywany) oraz przywilej ,% , nadawany czciej poprzez dodanie
opcji  6 ,% /# / ni przez doczanie go do listy wartoci parametru   .
W tabeli 9.2 opisano przywileje przeznaczone dla administratorw.

 Przywileje dla administratorw
Przywilej

Opis

45**?-454#*5<

Pozwala administratorowi na uywanie sowa kluczowego *?-454#


w instrukcjach 45**5<

;9

Pozwala na wczytywanie danych z plikw do tabel i odwrotnie

- .*5<

Pozwala na jawne uywanie instrukcji - .*5<

?4- 

Pozwala na ledzenie procesw wykonywanych przez serwer i ich


przerywanie

4-5:

Pozwala na powtrne zaadowanie tabel zawierajcych informacje na temat


praw dostpu oraz na odwieenie przywilejw, listy nazw czcych si
komputerw, dziennika zdarze i tabel

4?9 5*9-6 96*

Pozwala na uywanie instrukcji >-*5*= na nadawcach i odbiorcach


replikacji. Mechanizm replikacji zostanie opisany w rozdziale 12

4?9 5*9-65C

Pozwala serwerom bdcym odbiorcami replikacji na czenie si


z serwerem-nadawc. Mechanizm replikacji zostanie opisany w rozdziale 12

>-:5*5<5

Pozwala na odczytywanie listy wszystkich baz danych przy uyciu instrukcji


>-:5*5<5. Uytkownicy, ktrzy nie maj tego uprawnienia, bd widzie
wycznie bazy, do ktrych przydzielono im dostp

>=*:-6

Umoliwia zakoczenie pracy serwera MySQL

=?4

Pozwala administratorowi na zabijanie wtkw nalecych do dowolnego


uytkownika

Istnieje moliwo nadania opisanych przywilejw uytkownikom nie majcym statusu


administratora, jednak naley tego dokonywa z zachowaniem najwyszej ostronoci.
Z przywilejem 9 8- sprawa wyglda nieco inaczej. Jest on bardzo przydatny dla uytkownikw, gdy moliwo wstawiania danych bezporednio z plikw do tabel pozwala zaoszczdzi czas, konieczny na rczne wpisywanie kolejnych wartoci. Z drugiej strony
jednak moe zosta wykorzystany do zaadowania wszelkich plikw, ktre widzi serwer
MySQL, np. pliku bazy nalecej do innego uytkownika czy pliku zawierajcego hasa
dostpu. Przywilej ten powinien wic by nadawany z rozwag lub te administrator powinien sam dokonywa adowania danych z pliku do wskazanej przez uytkownika tabeli.

242

Cz II  Stosowanie MySQL

MySQL posiada rwnie dwa specjalne przywileje, przedstawione w tabeli 9.3.


  Przywileje specjalne
Przywilej

Opis

5

Nadaje wszystkie przywileje opisane w tabelach 9.1 i 9.2. Jest on rwnowany przywilejowi

=53

Nie nadaje adnych przywilejw. Powoduje zarejestrowanie uytkownika i pozwala mu


na zalogowanie si, lecz jakiekolwiek inne czynnoci s dla niego niedostpne. Odpowiednie
przywileje nadawane s zwykle pniej

5?49C93

! "#$%"
Przeciwiestwem ,% jest polecenie %-./-, uywane w celu odebrania uytkownikowi
okrelonych przywilejw. Jego skadnia jest bardzo podobna do skadni polecenia ,% :
4C-.   7
8
-6 
;4-    
 

Jeeli do polecenia ,% doczono opcj  6 ,% /# / , przywilej ten mona


cofn (podobnie jak wszystkie inne przywileje) w nastpujcy sposb:
4C-.5?49C93/3456*
;4-    
 

! &   '    "#$%"


Aby zarejestrowa uytkownika majcego status administratora, naley wpisa:
  
 
  
  

Polecenie to spowoduje nadanie wszystkich przywilejw na wszystkie bazy danych uytkownikowi o identyfikatorze 9, posugujcemu si hasem ':;<, oraz umoliwi nadanie dowolnego przywileju innym uytkownikom.
Niekiedy konieczne okazuje si wyeliminowanie tego uytkownika. Mona to zrobi w nastpujcy sposb:
      


Zarejestrujmy teraz uytkownika, ktry nie bdzie posiada adnych przywilejw:


    
   
   

Po rozmowie z Zosi wiadomo ju, w jaki sposb chce korzysta z bazy, mona wic nada
jej odpowiednie przywileje:

Rozdzia 9.  Tworzenie internetowej bazy danych

243

       ! 


   
 

Jak wida, nie ma ju potrzeby podawania hasa dostpu, jakim posuguje si Zosia.
Jeeli administrator dojdzie do wniosku, e Zosia wykonaa ju cz swoich zada, moe
ograniczy nadane jej przywileje:
 
   
 

Kiedy Zosia nie bdzie ju potrzebowaa dostpu do bazy danych, mona odebra jej
wszystkie pozostae przywileje:

   
 

"  


#$%$%  
  &   
Konieczne jest zarejestrowanie uytkownika, ktry czy si z baz danych poprzez
stron WWW zawierajc skrypty PHP. Rwnie w tym przypadku naley zastosowa
zasad najmniejszego przywileju, trzeba wic rozway, jakie operacje ma wykonywa
skrypt PHP.
W wikszoci przypadkw wystarcz przywileje -8-" , -% ,
-8- - i 5#
 -. Nadaje
si je w nastpujcy sposb:
      
   
   

Oczywicie ze wzgldw bezpieczestwa haso powinno by bardziej skomplikowane


ni podane w przykadzie.
Uytkownik korzystajcy z usug zewntrznej firmy internetowej otrzyma zapewne szersze
przywileje na prac z przydzielon mu baz danych. Identyfikator uytkownika i jego
haso dostpu bd prawdopodobnie umoliwiay zarwno wydawanie polece serwerowi
MySQL (tworzenie tabel itp.), jak i czenie si z baz z poziomu strony WWW (np. wyszukiwanie danych w tabeli). Uycie takiego samego identyfikatora uytkownika i hasa
mogoby obniy nieznacznie stopie zabezpieczenia systemu, zalecane jest wic zarejestrowanie nowego uytkownika z nastpujcym zbiorem przywilejw:
       ! 
   
   

Utwrz wic drug wersj uytkownika, gdy bdziemy jej potrzebowa w nastpnych
sekcjach.

244

Cz II  Stosowanie MySQL

(   )   


Wylogowanie si z serwera MySQL jest dokonywane za pomoc polecenia &. Zalecane jest ponowne zalogowanie si jako uytkownik internetowy (zarejestrowany w poprzednim punkcie) i sprawdzenie poprawnoci dziaania bazy danych. Jeeli wpisana instrukcja ,% zostaa wykonana, lecz nadal nie mona si zalogowa, zwykle oznacza to,
e w trakcie procesu instalacji nie usunito anonimowego uytkownika. Z powrotem
wic trzeba zalogowa si jako uytkownik  i wykona instrukcje zawarte w Dodatku
A, zmierzajce do usunicia kont anonimowych. Po wykonaniu tej operacji nie powinno
ju by problemw z zalogowaniem si jako uytkownik internetowy.




   %'
Przed przystpieniem do lektury tego podrozdziau czytelnik powinien by ju zalogowany do serwera MySQL na koncie zwykego uytkownika, zaoonym w poprzednim podrozdziale lub te utworzonym przez administratora systemu.
Pierwsz czynnoci, jak naley wykona, jest wskazanie bazy danych, ktra zostanie wykorzystana. Suy do tego nastpujce polecenie:
 

gdzie  jest nazw bazy danych.


T sam operacj mona wykona, podajc nazw bazy danych w trakcie logowania si
do serwera:
:
    
 

W omawianym przykadzie wykorzystywana bdzie baza danych :


  

Po wykonaniu tego polecenia MySQL powinien zwrci nastpujcy komunikat:


:

)
 
 

Jeeli przed przystpieniem do pracy nie zostanie wybrana adna baza danych, serwer wywietli komunikat o bdzie:
44-4$'D10E:'''26:

)
    


   %'
Nastpnym etapem tworzenia bazy danych jest konstrukcja tabel. Suy do tego polecenie
jzyka SQL "%- - 8-, ktrego skadnia przedstawia si nastpujco:
45**5<  0
2

Parametr    powinien okrela nazw tabeli, ktra ma zosta utworzona. Z kolei
parametr 
 powinien mie posta listy kolumn oddzielonych przecinkami, jakie

Rozdzia 9.  Tworzenie internetowej bazy danych

245

bdzie zawiera nowa tabela. Kada z kolumn musi by okrelona przez podanie jej nazwy i typu danych.
Przypomnijmy schemat bazy danych ksigarni Ksikorama:

  
 



    ! "
#!$ 
 
%$   %

Na listingu 9.1 przedstawione s polecenia SQL, za pomoc ktrych zostan utworzone


powysze tabele (przy zaoeniu, e istnieje ju baza danych ). Kod ten znajduje
si rwnie w folderze rozdzial_09 w pliku o nazwie ksiazkorama.sql (przykady s dostpne na pycie CD doczonej do ksiki).
   ksiazkorama.sql kod SQL tworzy tabele w bazie danych ksigarni Ksikorama


) F 
0F       
 B    
F /

GF
0&'2   /

 
0$''2   /
 H
0E'2   
2!


) G
 

0G
        
 B    
F /
F       /

,
01/I2/



   
2!


) F
GF
0) 
0$E2    
F /

  
0&'2/
  
0$''2/

,
0D/I2
2!


) GH BG

0G
        /
) 
0$E2   /
     /
 
F 0G
  /) 2
2!


)   GH BF
G F
0) 
0$E2    
F /
  GH
 (
2!

246

Cz II  Stosowanie MySQL

Kod SQL zawarty w pliku ksiazkorama.sql zostanie wykonany po wpisaniu nastpujcego polecenia (zakadamy przy tym, e plik ksiazkorama.sql ma t sam lokalizacj, co
aplikacja !&):
 " #
# #$ #%  "

(Pamitaj, by parametr nazwa_komputera zastpi nazw swego komputera).


Mechanizm przekierowania do pliku zawierajcego kod SQL jest bardzo porczny, gdy
pozwala na edycj kodu za pomoc dowolnego edytora tekstowego przed jego wykonaniem.
Pojedyncza tabela jest tworzona za pomoc odrbnego polecenia "%- - 8-. Jak wida, kada z tabel zawiera kolumny wyszczeglnione w schemacie bazy danych, utworzonym w poprzednim rozdziale. Ponadto kadej kolumnie nadano nazw oraz przypisano typ danych. Niektre kolumny s opisywane przez dodatkowe atrybuty, objanione
w nastpnym punkcie.

     
 
/ 588 oznacza, e pole, przy ktrym ten atrybut stoi, musi w kadym wierszu tabeli
mie nadan jak warto. Jeeli przy opisie nowej kolumny atrybut zosta pominity,
wwczas jej pola mog by puste ( 588).
5 /$ "%--

jest specjalnym atrybutem nadawanym kolumnom przechowujcym


wartoci cakowitoliczbowe. Jeeli do tabeli zostanie wpisany nowy rekord, w ktrym
warto pola z atrybutem 5 /$ "%-- bdzie nieokrelona, wwczas serwer MySQL
automatycznie wstawi w to miejsce unikalny identyfikator bdzie nim liczba cakowita
o wartoci rwnej dotychczasowej maksymalnej wartoci w tej kolumnie i powikszonej
o jeden. W kadej tabeli moe wystpowa najwyej jedna kolumna z tym atrybutem.
Kolumny z atrybutem 5 /$ "%-- musz by indeksowane.

Atrybut #% %= -= oznacza, e wskazana kolumna jest kluczem podstawowym tabeli,
a wartoci w niej zapisywane musz by unikalne. MySQL automatycznie indeksuje takie
kolumny. Zauwamy, e w pliku ksiazkorama.sql wszystkim kolumnom z atrybutem
5 /$ "%-- (np. 
w tabeli ) przypisano rwnie atrybut #% %= -=,
dziki czemu zosta speniony wymg indeksowania pl z atrybutem 5 /$ "%-- .
Atrybut #% %= -= moe by wyszczeglniony zaraz za nazw nowej kolumny wycznie w przypadku, gdy tylko ta jedna kolumna jest kluczem podstawowym tabeli. Inny
sposb okrelenia klucza podstawowego zosta zaprezentowany dla tabeli #!$>
. Wykorzystanie omawianej metody jest wymuszone tym, e w skad klucza
podstawowego tabeli #!$ wchodzi nie jedna, ale dwie kolumny jednoczenie.
(To prowadzi rwnie do utworzenia indeksu bazujcego na obydwch kolumnach).
Atrybut 5  , -
wpisany za identyfikatorem typu cakowitoliczbowego oznacza, e kolumna moe zawiera tylko wartoci nieujemne.

  
Rozwamy przykad pierwszej utworzonej tabeli:

Rozdzia 9.  Tworzenie internetowej bazy danych

247



) F 
0F       
 B    
F /

GF
0&'2   /

 
0$''2   /
 H
0E'2   
2!

Tworzc now tabel, naley kadej jej kolumnie przypisywa odpowiedni typ danych.
Wedug schematu tabela  skada si z czterech kolumn. Pierwsza z nich, 
,
jest kluczem podstawowym o wartociach typu cakowitoliczbowego (typ ). Co wicej, wszystkie pola ID (
, 
) mog mie tylko wartoci nieujemne.
Wykorzystano rwnie cechy atrybutu 5 /$ "%-- , dziki ktremu MySQL sam dba
o spenienie powyszych wymogw mamy wic jeden kopot z gowy.
Pozostae kolumny bd przechowywa dane majce posta acuchw znakw nadano im wic typ * o okrelonej dla kadej kolumny dugoci acucha, zawartej w nawiasach okrgych. Na przykad w polu  mona zapisywa acuchy zawierajce nie wicej ni 50 znakw.
Nawet jeli nazwisko klienta liczy mniej ni 50 liter warto pola , zawsze bdzie
zajmowa tyle pamici, ile trzeba do zapisania 50 znakw. MySQL automatycznie doda
do nazwiska tyle znakw spacji, ile brakuje do wykorzystania caej przydzielonej polu
pamici. Alternatyw dla typu * jest 7* wartoci pl tego typu zajmuj zawsze o jeden bajt wicej ni trzeba do zapamitania podanego acucha. Stosowanie pl
typu 7* generalnie oszczdza wic pami, moe jednak negatywnie wpywa na wydajno caego systemu.
Wikszo kolumn zostaa zadeklarowana jako / 588. Zastosowanie takiego niewielkiego rozwizania optymalizacyjnego wszdzie tam, gdzie to moliwe, moe nieznacznie polepszy wydajno pracy systemu. Zagadnienia dotyczce optymalizacji pracy
serwera MySQL zostan poruszone w rozdziale 12.
W obrbie niektrych polece "%- - 8- zawarte s elementy, ktre nie zostay jeszcze omwione. Rozwamy kolejny przykad:


) G
 

0G
        
 B    
F /
F       /

,
01/I2/



   
2!

Kolumna  jest zadeklarowana jako liczba zmiennoprzecinkowa typu ?. Dla
wikszoci typw liczbowych zmiennoprzecinkowych istnieje moliwo okrelenia
maksymalnej liczby cyfr, jakie bd wywietlane, oraz iloci miejsc znaczcych po
przecinku. W przykadzie ksigarni internetowej warto zamwie jest okrelana w zotwkach, zadeklarowano wic, i ma ona nie wicej ni sze cyfr plus dwie cyfry znaczce po przecinku.
Dane przechowywane w kolumnie
 maj typ .
W rozwaanej tabeli wszystkie kolumny, oprcz kolumny , s zadeklarowane jako
/ 588. Dlaczego? Ot wpisujc nowe zamwienie naley najpierw zapisa je w tabeli

248

Cz II  Stosowanie MySQL
, nastpnie doda odpowiednie rekordy do tabeli #!$, po czym
obliczy warto caego zamwienia. W momencie wpisywania nowego zamwienia jego
warto nie zawsze jest znana, dlatego wartoci pola  mog by nieokrelone.

W podobny sposb jak  jest tworzona tabela :




) F
GF
0) 
0$E2    
F /

  
0&'2/
  
0$''2/

,
0D/I2
2!

W tym przypadku nie ma potrzeby tworzenia klucza podstawowego, poniewa kada publikacja ma wasny, unikalny numer ISBN. Nie liczc kolumny  , wszystkie pozostae
kolumny tej tabeli mog posiada wartoci 588. Mona bowiem wyobrazi sobie sytuacj, w ktrej znany jest tylko numer ISBN ksiki, zanim jeszcze zostanie ujawniony
jej tytu, autor i cena.
Na przykadzie tabeli #!$ zademonstrowano sposb deklarowania kluczy
podstawowych skadajcych si z wicej ni jednej kolumny:


) GH BG

0G
        /
) 
0$E2   /
     /
 
F 0G
  /) 2
2!

Pole , w ktrym zapamitywana jest liczba zamwionych egzemplarzy jednej ksiki,
jest typu = 5  , -
, a wic moe przyjmowa wartoci liczb cakowitych z zakresu
od 0 do 255.
Jak ju wspomnielimy, klucze podstawowe skadajce si z wicej ni jednej kolumny
naley deklarowa za pomoc klauzuli #% %= -=. Przykad jej uycia zaprezentowano
powyej.
Ostatnie polecenie z pliku ksiazkorama.sql powoduje utworzenie tabeli %$:


)   GH BF
G F
0) 
0$E2    
F /
  GH
 (
2!

Uyto w nim nowego typu danych, ktry nie zosta jeszcze omwiony to typ @.
Jest on stosowany w przypadku duszych tekstw, np. artykuw prasowych. Istnieje kilka
jego wariantw, ktre zostan szczegowo opisane w dalszej czci tego rozdziau.
Dla jeszcze lepszego zrozumienia procesu tworzenia tabel podane zostan zasady nadawania nazw kolumnom oraz oglne informacje na temat identyfikatorw. Najpierw jednak
powrcimy na chwil do utworzonej bazy danych.

Rozdzia 9.  Tworzenie internetowej bazy danych

249

  
)   *  +,$(  -"+./0"
Po zalogowaniu si do serwera MySQL i wybraniu bazy  mona sprawdzi, jakie
tabele wchodz w jej skad, wpisujc nastpujce polecenie:
 " &  

Serwer wywietli wwczas list wszystkich tabel wybranej bazy danych:


JJ
@*
) B BF
GF@
JJ
@F @
@F
GF@
@GH BG
 @
@  GH BF
G F@
@G
 
@
JJ
&   0''1 2

Polecenia 6/ mona rwnie uy do wywietlenia wszystkich baz danych udostpnianych przez serwer:
 " &  

Uytkownicy, ktrzy nie posiadaj przywileju 6/


 -, zobacz jedynie list baz
danych, do ktrych udzielono im dostpu.
Szczegowe informacje na temat konkretnej tabeli s dostpne po uyciu polecenia

-"% -:
 " &  

MySQL wywietli wszystkie informacje, ktre naleao poda przy tworzeniu tabeli:
JJJJJJJ
@; @* @6@. @: ,
 @(
@
JJJJJJJ
@) @
0$E2@@?49@@@
@
  @
0&'2@#@@6=@@
@  @
0$''2@#@@6=@@
@
@,
0D/I2@#@@6=@@
JJJJJJJ
D   0''& 2

Oba polecenia s szczeglnie przydatne do przypomnienia sobie np. typu danych przechowywanych w konkretnej kolumnie czy przeanalizowania struktury bazy utworzonej
przez innego projektanta.

  
Ju wczeniej krtko wspominalimy o indeksach, poniewa definiowanie kluczy gwnych jest rwnoznaczne z utworzeniem indeksw na tych kolumnach.

250

Cz II  Stosowanie MySQL

Jednym z czstych problemw, ktry sygnalizuj niedowiadczeni uytkownicy serwera


MySQL, jest to, e narzdzie, ktre jest uznawane za niezwykle szybkie, na ich bazach
danych dziaa wolno. Przyczyn tego problemu jest po prostu to, e na bazie danych nie
utworzono indeksw. (Wszak moliwe jest utworzenie tabel, ktre nie posiadaj kluczy
gwnych ani indeksw).
Indeksy zostan utworzone automatycznie na kolumnach, ktre wskazano jako klucze.
Jeli okae si, e wiele zapyta wykonywanych jest na kolumnie, ktra nie jest kluczem,
mona pokusi si o utworzenie na niej indeksu w celu poprawienia wydajnoci. Mona
tego dokona instrukcj "%- -
-A. Jej oglna posta jest nastpujca:
45*7=69=@;=*A*896:A
G
B  F
-6
G
B
) 0
G
BF B  F
H702875 @: /K82

(Indeksy 9588 -A , czyli penotekstowe, su do indeksowania pl tekstowych; wicej


na ich temat powiemy w rozdziale 13.).
Opcjonalne pole 3 suy do wskazania, aby tylko pierwszych 3 znakw
pola podlegaa indeksowaniu. Mona rwnie wskaza, by indeks by uoony w porzdku
rosncym (") lub malejcym (
-"). Porzdkiem domylnym jest porzdek rosncy.

1       

Niektrzy czytelnicy mog ju wiedzie, e MySQL udostpnia wicej ni jeden typ tabel
czy modu przechowywania danych, w tym rwnie te, ktre realizuj mechanizmy
transakcyjne. Wicej na temat typw tabel powiemy w rozdziale 13. Na razie wszystkie
tabele znajdujce si w naszych bazach danych bd uyway domylnego moduu przechowywania danych MyISAM.

& 
 
MySQL rozrnia pi typw identyfikatorw: bazy danych, tabele, kolumny i indeksy
(wszystkie s ju czytelnikowi znane) oraz aliasy (zostan one szerzej omwione w nastpnym rozdziale).
Bazy danych w MySQL odwzorowuj nazwy katalogw w strukturze plikw systemu operacyjnego, natomiast tabele odpowiadaj pojedynczym plikom. Fakt ten ma bezporedni
wpyw na zasady nazewnictwa oraz warunkuje rozrnianie (lub nie) wielkich i maych
liter w nazwach baz i tabel. Jeeli system operacyjny rozrnia wielkie i mae litery,
wwczas czyni to rwnie serwer baz danych (tak jest w przypadku systemu Unix),
w przeciwnym razie wielko liter nie bdzie miaa znaczenia (np. w przypadku Windows). W nazwach kolumn i aliasw wielko liter nie odgrywa roli, jednak w obrbie jednego polecenia nazwy te musz by zapisywane w taki sam sposb.
Warto wspomnie, e lokalizacja katalogw i plikw z danymi jest ustawiana w plikach
konfiguracyjnych serwera MySQL. Mona j odnale, wpisujc w wierszu polece systemu operacyjnego nastpujc komend:

 %

) 

Rozdzia 9.  Tworzenie internetowej bazy danych

251

Nastpnie szukamy zmiennej .


Podsumowanie rozwaa na temat identyfikatorw znajduje si w tabeli 9.4. Jedynym
wyjtkiem, o ktrym naley wspomnie, jest fakt, e identyfikatory MySQL nie mog
zawiera znakw o kodzie ASCII rwnym 0 i 255 (zreszt i tak nie wiadomo, w jakim
celu miayby zosta uyte).
 Identyfikatory MySQL
Typ
identyfikatora

Dugo
maksymalna

Rozrnianie
wielkoci liter

Znaki dozwolone

Baza danych

64

Tak jak system


operacyjny

Wszystkie dozwolone przez system operacyjny


w nazwie katalogw, z wyjtkiem znaku L

Tabela

64

Tak jak system


operacyjny

Wszystkie dozwolone przez system operacyjne


w nazwie plikw, z wyjtkiem znakw L i 

Kolumna

64

Nie

Wszystkie

Indeks

64

Nie

Wszystkie

Alias

255

Nie

Wszystkie

Podane zasady ulegaj jednak czstym zmianom.


Poczwszy od wersji 3.23.6 serwera MySQL identyfikatory mog zawiera sowa zarezerwowane i wszelkiego rodzaju znaki specjalne. Jedynym wymogiem jest wwczas
konieczno zamknicia ich w odwrotnych apostrofach (uzyskiwanych przez wcinicie
klawisza tyldy w grnym lewym rogu wikszoci klawiatur). Mona na przykad napisa:



)
 M


)
 M!

Wczeniejsze wersje systemu MySQL s pod tym wzgldem bardziej restrykcyjne i nie
dozwalaj wykona tak sformuowanego polecenia.
Oczywicie z tak szerokich moliwoci naley korzysta z umiarem. To, e baza moe
nosi nazw B 'B, wcale nie oznacza, e powinna zosta tak nazwana.
Stosuje si tu standardow zasad nazewnictwa, wedug ktrej identyfikatory powinny
mie sensowne brzmienie.

!   %'    %'


W MySQL wyrnia si trzy podstawowe typy danych, ktre mog by przechowywane
w kolumnach: liczbowy, daty i czasu oraz acuchowy. Kada z tych kategorii dzieli si
na szereg podtypw. W tym podrozdziale scharakteryzujemy krtko wszystkie dostpne
typy danych, natomiast ich wady i zalety omwimy w rozdziale 12.
Wielko pamici potrzebnej do przechowania jednej danej cile zaley od jej typu.
Deklarujc typ kolumny, naley kierowa si nastpujc zasad: zawsze wybiera si
taki typ danych, ktry bdzie zajmowa najmniej pamici i jednoczenie pozwoli na zapisanie wszystkich potrzebnych informacji.

252

Cz II  Stosowanie MySQL

W przypadku niektrych typw danych moliwe jest okrelenie maksymalnej szerokoci


wywietlania. W poniszych tabelach wielko t zaznaczono liter M. Jeeli jest ona
opcjonalna, litera M znajduje si w nawiasach kwadratowych. Najwiksza dopuszczalna
warto parametru M wynosi 255.
Wszystkie parametry opcjonalne s przedstawione w nawiasach kwadratowych.

  

Typy liczbowe dziel si na cakowitoliczbowe i zmiennoprzecinkowe. W przypadku tych
ostatnich istnieje moliwo zadeklarowania liczby cyfr znaczcych po przecinku w tabelach wielko ta jest oznaczona symbolem D. Maksymalna warto parametru D jest
wyznaczona przez mniejsz spord dwch liczb: 30 i M 2 (tj. maksymalna szeroko wywietlania minus 2 jeden znak przecinka i jeden znak dla cakowitej czci danej liczby).
W przypadku typw cakowitoliczbowych mona je zawzi do typu 5  , -
tak, jak
pokazano na listingu 9.1.
Dla wszystkich typw liczbowych mona ustawi atrybut -%/9 88. Powoduje on, e przy
wywietlaniu zawartoci kolumn posiadajcych ten atrybut zapisane w nich liczby zostan
poprzedzone zerami. Jeeli kolumna zostanie zdefiniowana jako -%/9 88, automatycznie bdzie ona rwnie mie typ 5  , -
.
Typy cakowitoliczbowe zostay przedstawione w tabeli 9.5. W drugiej kolumnie tabeli
zawarto dopuszczalny zakres danych w przypadku braku atrybutu 5  , -
(pierwszy
wiersz) i z ustawionym atrybutem 5  , -
(drugi wiersz).
 Typy cakowitoliczbowe
Typ

Zakres

Wykorzystanie
pamici
(w bajtach)

*96#96*7028

127..128 lub 0..255

Opis
Bardzo mae liczby
cakowite

<9*

Synonim *96#96*

<--

Synonim *96#96*

596*7028

32768..32767 lub 0..65535

Mae liczby cakowite

:9=96*7028

8388608..8388607
lub 0..16777215

rednie liczby cakowite

96*7028

231..2311 lub 0..2321

Zwyke liczby cakowite

96*347028
<9396*7028

Synonim typu 96*


63

63

64

2 ..2 1 lub 0..2 1

Due liczby cakowite

Rozdzia 9.  Tworzenie internetowej bazy danych

253

Tabela 9.6 przedstawia typy zmiennoprzecinkowe.


 Typy zmiennoprzecinkowe
Typ

Zakres

Wykorzystanie
pamici
(w bajtach)

;-5*0 2

Zalenie od precyzji

rny

Uywany do deklarowania
liczb zmiennoprzecinkowych
o pojedynczej lub podwjnej
precyzji

;-5*70/28

1.175494351E38
3.402823466E+38

Liczby zmiennoprzecinkowe
o pojedynczej precyzji. Typ ten
jest rwnoznaczny z typem
;-5*0D2, pozwala przy tym
na okrelenie szerokoci
wywietlania i liczby cyfr
znaczcych po przecinku

:-=<70/28

1.7976931348623157E308
2.2250738585072014E+308

Liczby zmiennoprzecinkowe
o podwjnej precyzji. Typ ten jest
rwnoznaczny z typem ;-5*0N2,
pozwala przy tym na okrelenie
szerokoci wywietlania i liczby
cyfr znaczcych po przecinku

:-=<
?4 99-670/28

Jak wyej

Synonim typu :-=<70/28

4570/28

Jak wyej

Synonim typu :-=<70/28

: 95707/828

Rny

6=49 70/28

Jak wyej

Synonim typu : 95

: 70/28

Jak wyej

Synonim typu : 95

;9A:70/28

Jak wyej

Synonim typu : 95

M+2

Opis

Liczba zmiennoprzecinkowa
przechowywana jako zmienna
typu >54. Zakres zaley
od wartoci M szerokoci
wywietlania



MySQL obsuguje szereg typw daty i czasu s one zaprezentowane w tabeli 9.7.
Kady z nich pozwala na wpisanie danych w formie liczbowej lub acucha znakw.
Charakterystyczn cech typu - # jest to, e jeeli pole tego typu pozostanie
niewypenione, wwczas automatycznie zostan w nim zapisane czas i data aktualnie
wykonywanej operacji. Waciwo ta jest szczeglnie przydatna do analizy transakcji.
Tabela 9.8 prezentuje moliwe dostpne formaty wywietlania wartoci typu - #.

254

Cz II  Stosowanie MySQL

 Typy daty i czasu


Typ

Zakres

Opis

:5*

1000-01-01do 9999-12-31

Data wywietlana w formacie RRRR-MM-DD

*9

838:59:59 do 838:59:59

Czas wywietlany w formacie GG:MM:SS. Zakres typu


jest tak szeroki, e zapewne nigdy nie bdzie w peni
wykorzystywany

:5**9

1000-01-01 00:00:00
do 9999-12-31 23:59:59

Data i czas wywietlane w formacie


RRRR-MM-DD GG:MM:SS

*9*5?7028

1970-01-01 00:00:00
do roku 2037

Typ szczeglnie przydatny do ledzenia transakcji.


Format wywietlania zaley od wartoci parametru M,
a grny zakres typu od systemu operacyjnego

#5470@28

70 69 (czyli 1970 2069)


lub 1901 2155

Rok wywietlany w formie dwu- lub czterocyfrowej.


Jak wida, kady z nich ma odmienny zakres

 Formaty wywietlania wartoci typu TIMESTAMP


Podany typ

Format wywietlania

*9*5?

RRRRMMDDGGMMSS

*9*5?0$D2

RRRRMMDDGGMMSS

*9*5?0$I2

RRMMDDGGMMSS

*9*5?0$'2

RRMMDDGGMM

*9*5?0N2

RRRRMMDD

*9*5?012

RRMMDD

*9*5?0D2

RRMM

*9*5?0I2

RR

  
Typy acuchowe dziel si na trzy grupy. Pierwsza z nich to klasyczne (zwyke) acuchy
znakw, czyli krtkie fragmenty tekstu. Do tej grupy zaliczamy typy "6% (acuchy o staej
dugoci) oraz .%"6% (acuchy o zmiennej dugoci). Dla kadego z nich mona okreli
dugo acucha. acuchy zapisywane w kolumnach typu "6% zostan uzupenione
spacjami w celu penego wykorzystania dopuszczalnego limitu ich dugoci. Natomiast
w kolumnach typu .%"6% acuchy s zapisywane w ich pierwotnej formie, dziki czemu zajmuj one tylko tyle pamici, ile potrzeba (tak wic w przypadku wartoci "6% MySQL usunie kocowe znaki spacji przy ich pobieraniu z bazy, natomiast ewentualne
znaki spacji znajdujce si na kocu acucha .%"6% zostan wyeliminowane w momencie zapisania go do bazy). Wybr ktrego z tych typw sprowadza si wic do rozstrzygnicia dylematu midzy zwikszeniem szybkoci dziaania kosztem uywanej pamici
a ograniczeniem zuycia pamici i spadkiem wydajnoci systemu. Zagadnienie to zostanie
wyczerpujco omwione w rozdziale 12.

Rozdzia 9.  Tworzenie internetowej bazy danych

255

Do drugiej grupy nale typy -A i 8/. Wartoci obu wymagaj zrnicowanych iloci
pamici. Typy te s przeznaczone do przechowywania, odpowiednio, duszych tekstw
oraz danych binarnych. Wartoci typu 8/ to tzw. due obiekty binarne (ang. binary large
objects), std te wywodzi si jego nazwa. Obiekty te mog przechowywa kady rodzaj
danych, np. obrazy, dwiki itp.
W praktyce jedyna rnica pomidzy oboma typami polega na tym, e w danych typu 8/
rozrniana jest wielko liter, typ -A natomiast tej waciwoci nie posiada. Poniewa oba typy pozwalaj na zapisywanie duych iloci danych, sposb ich wykorzystania jest nieco bardziej skomplikowany. Zagadnienie to zostanie szerzej przedstawione
w rozdziale 12.
Trzecia grupa skada si z dwch typw specjalnych - i - 5. Typ - jest uywany
w celu zawenia wartoci danych, ktre mog by zapisane w danej kolumnie, do z gry
okrelonego zbioru wartoci, przy czym dane zapisane w kolumnie mog mie wicej ni
jedn warto z tego zbioru. Podany zbir wartoci moe zawiera co najwyej 64 elementy.
- 5 to inaczej typ wyliczeniowy. Jest on bardzo podobny do typu - , z jedn rnic:
kolumny typu - 5 mog zawiera tylko jedn spord okrelonego zbioru wartoci lub
warto 588, a zbir wartoci dopuszczalnych moe zawiera do 65 535 elementw.

Tabele 9.9, 9.10 i 9.11 zawieraj podsumowanie waciwoci typw acuchowych.


Tabela 9.9 przedstawia zwyke typy acuchowe.
 Zwyke typy acuchowe
Typ

Zakres

Opis

765*9-658 >54027<9654#@
5 99@=69 -:8

1 255 znakw

acuch znakw o staej dugoci M, gdzie M


moe przybiera wartoci od 1 do 255. Sowo
kluczowe 65*9-65 wymusza uycie domylnego
zbioru znakw. Zbir ten jest i tak domylnie
wykorzystywany przez MySQL, jednak opcja ta
zostaa udostpniona jako cz standardu
ANSI SQL. Sowo kluczowe <9654# wycza
rozpoznawanie wielkoci liter (domylnie
wielko liter jest rozpoznawana). Sowo
kluczowe " oznacza, e w tej kolumnie
uywany bdzie zestaw znakw latin1. Sowo
kluczowe 5 "/
- natomiast wskazuje, e uyty
zostanie zestaw znakw ucs

Synonim typu >540$2

1 255 znakw

acuch znakw o rnej dugoci, reszta


jak wyej

>54
765*9-658C54 >54027<9654#8

Tabela 9.10 prezentuje typy -A i 8/. Maksymalna liczba znakw w polu typu -A jest
rwna maksymalnej wielkoci pliku, jaki mona by przechowywa w tym polu, mierzonej
w bajtach.
Tabela 9.11 prezentuje typy - i - 5.

256

Cz II  Stosowanie MySQL

  Typy TEXT i BLOB


Typ

Maksymalna dugo (w znakach)

Opis

*96#<-<

28 1 (czyli 255)

May obiekt <-<

*96#*A*

2 1 (czyli 255)

<-<

2 1 (czyli 65535)

:9=<-<
:9=*A*

-63*A*

Zwyky obiekt <-<

2 1 (czyli 65535)

*A*

-63<-<

Krtkie pole tekstowe

16

Pole tekstowe o zwykej dugoci

24

2 1 (czyli 16777215)
24

2 1 (czyli 16777215)
32

2 1 (czyli 4294967295)
32

2 1 (czyli 4294967295)

redni obiekt <-<


Pole tekstowe o redniej dugoci
Duy obiekt <-<
Dugie pole tekstowe

  Typy ENUM i SET


Typ

Maksymalna ilo
wartoci w zbiorze

6=0  / /K2

65535

*0  / /K2

64

Opis
W kolumnie tego typu moe znajdowa si tylko
jedna warto ze zbioru wartoci dopuszczalnych
lub 6=
W kolumnie tego typu moe znajdowa si
podzbir zbioru wartoci dopuszczalnych lub 6=

(%  %' 


Wicej informacji na temat tworzenia bazy danych MySQL znajduje si w podrczniku
elektronicznym, dostpnym pod adresem http://www.mysql.com.

!   

Poniewa znamy ju metody rejestrowania uytkownikw, zakadania baz danych i tworzenia tabel, moemy przej do sposobw korzystania z bazy danych. W nastpnym rozdziale zostan przedstawione metody zapisywania danych do tabel, ich modyfikacji i usuwania oraz wysyania zapyta do bazy.

You might also like