IDZ DO
PRZYK艁ADOWY ROZDZIA艁
SPIS TRECI
KATALOG KSI膭呕EK
KATALOG ONLINE
ZAM脫W DRUKOWANY KATALOG
TW脫J KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAM脫W INFORMACJE
O NOWOCIACH
ZAM脫W CENNIK
CZYTELNIA
FRAGMENTY KSI膭呕EK 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.
Wydanie drugie.
Vademecum profesjonalisty
Autorzy: Luke Welling, Laura Thomson T艂umaczenie: Daniel Kaczmarek, 艁ukasz Zieli艅ski ISBN: 83-7361-140-1
Tytu艂 orygina艂u: PHP and MySQL Web
Development, Second Edition
Format: B5, stron: 840
PHP i MySQL to wydajny tandem, pozwalaj膮cy na realizacj臋 wielu projekt贸w
zwi膮zanych z programowaniem aplikacji internetowych. Autorzy ksi膮偶ki „PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty” stworzyli wi臋c unikatowy podr臋cznik, kt贸ry 艂膮czy w sobie opis funkcjonalno扭ci PHP i MySQL
z prezentacj鹿 wielu praktycznych rozwi鹿za帽, stworzonych za pomoc鹿 tych narz锚dzi.
To podej扭cie okaza鲁o si锚 trafione, czego dowodem jest ogromna popularno扭忙
pierwszego wydania tej ksi鹿驴ki.
Opr贸cz sk鲁adni i biblioteki funkcji PHP, ksi鹿驴ka opisuje r贸wnie偶 podstawowe poj臋cia
z dziedziny profesjonalnej in偶ynierii oprogramowania zwi膮zanego z sieci膮 WWW.
Niekt贸re, takie jak utrzymywanie, wsp贸艂praca i testowanie, s膮 kwestiami istotnymi
dla in偶ynier贸w oprogramowania. Inne poj臋cia, takie jak uwierzytelnianie, szyfrowanie
i kontrola sesji, maj膮 szczeg贸lne znaczenie dla projekt贸w programistycznych opartych
na Internecie.
• Podstawowy kurs PHP
• Tworzenie i obs艂uga baz danych za pomoc膮 MySQL
• Dynamiczne tworzenie kodu HTML, obrazk贸w i dokument贸w
• Tworzenie bezpiecznych us艂ug za pomoc膮 uwierzytelniania i SSL
• Tworzenie koszyka na zakupy dla witryn handlu elektronicznego
• Opis praktyk zwi膮zanych z in偶ynieri膮 oprogramowania dla wi臋kszych projekt贸w WWW
• Zastosowanie obiektowych technik programistycznych
• Tworzenie spersonalizowanych dokument贸w PDF
• Korzystanie z us艂ug WWW za pomoc膮 XML i SOAP
„PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty” to ksi膮偶ka, kt贸ra nie tylko przekazuje wiedz臋 na temat PHP i MySQL, ale tak偶e prezentuje praktyczne sposoby jej wykorzystania. Je扭li chcesz szybko nauczy忙 si锚 tworzenia profesjonalnych aplikacji WWW, ksi鹿驴ka ta b锚dzie trafionym zakupem.
Zastosowanie PHP ................................................... .................................................. 32
Przyk艂adowa aplikacja: „Cz臋艣ci samochodowe Janka”................................................... 32
Formularz zam贸wienia ................................................... ....................................... 32
Przetwarzanie formularza ................................................... ................................... 34
Osadzanie PHP w HTML ................................................... ........................................ 34
Zastosowanie znacznik贸w PHP ................................................... .......................... 35
Style znacznik贸w PHP................................................... ....................................... 36
Instrukcje PHP ................................................... .................................................. 36
Odst臋py ................................................... ................................................... ......... 37
Komentarze ................................................... ................................................... ... 37
Dodawanie zawarto艣ci dynamicznej................................................... .......................... 38
Wywo艂ywanie funkcji ................................................... ........................................ 39
Funkcja date() ................................................... ................................................... 39
Dost臋p do zmiennych formularza................................................... .............................. 39
Zmienne formularza................................................... ........................................... 40
艁膮czenie ci膮g贸w ................................................... ................................................ 42
Zmienne i ci膮gi znak贸w ................................................... ..................................... 43
Identyfikatory ................................................... ................................................... ...... 44
Zmienne zadeklarowane przez u偶ytkownika ................................................... .............. 44
Przypisywanie warto艣ci zmiennym ................................................... ........................... 44
Typy zmiennych................................................... ................................................... .. 45
Typy danych w PHP ................................................... .......................................... 45
Si艂a typu ................................................... ................................................... ........ 45
Rzutowanie typu................................................... ................................................ 46
Zmienne zmiennych................................................... ........................................... 46
Sta艂e.............................................. ................................................... ........................4. 7
Zasi臋g zmiennych................................................... ................................................... . 47
Operatory ................................................... ................................................... ............ 48
Operatory arytmetyczne ................................................... ..................................... 49
Operatory ci膮g贸w ................................................... .............................................. 50
Operatory przypisania ................................................... ........................................ 50
Operatory por贸wna艅 ................................................... .......................................... 52
Operatory logiczne................................................... ............................................. 53
6 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Operatory bitowe................................................... ............................................... 54
Pozosta艂e operatory ................................................... ........................................... 54
Stosowanie operator贸w: obliczanie sum w formularzu................................................... 56
Pierwsze艅stwo i kolejno艣膰: wyznaczanie warto艣ci wyra偶e艅............................................ 57
Zarz膮dzanie zmiennymi ................................................... ........................................... 58
Sprawdzanie i ustawianie typ贸w zmiennych................................................... ......... 58
Sprawdzanie stanu zmiennej ................................................... ............................... 59
Reinterpretacja zmiennych................................................... .................................. 60
Struktury kontroluj膮ce ................................................... ............................................. 60
Podejmowanie decyzji za pomoc膮 instrukcji warunkowych............................................ 60
Instrukcja if................................................... ................................................... .... 61
Bloki kodu ................................................... ................................................... ..... 61
Instrukcja else ................................................... ................................................... 62
Instrukcja elseif ................................................... ................................................. 62
Instrukcja switch................................................... ............................................... 63
Por贸wnanie r贸偶nych instrukcji warunkowych................................................... ....... 65
Iteracja: powtarzanie dzia艂a艅 ................................................... .................................... 65
P臋tle while ................................................... ................................................... ..... 66
P臋tle for i foreach................................................... .............................................. 67
P臋tle do..while................................................... ................................................... 69
Wy艂amywanie si臋 ze struktury skryptu ................................................... ...................... 69
W nast臋pnym rozdziale: zapisywanie zam贸wienia klienta .............................................. 69
Zapisywanie danych do p贸藕niejszego u偶ycia................................................... .............. 71
Przechowywanie i wyszukiwanie zam贸wie艅 Janka ................................................... ..... 72
Podstawowe informacje na temat przetwarzania plik贸w ................................................. 73
Otwieranie pliku................................................... ................................................... ... 73
Tryby otwarcia pliku................................................... .......................................... 73
Stosowanie funkcji fopen() do otwarcia pliku ................................................... ....... 74
Otwieranie pliku przez protok贸艂 FTP lub HTTP ................................................... ... 76
Problemy z otwieraniem plik贸w ................................................... .......................... 77
Zapisywanie danych w pliku ................................................... .................................... 79
Parametry funkcji fwrite() ................................................... .................................. 79
Formaty plik贸w ................................................... ................................................. 79
Zamykanie pliku ................................................... ................................................... .. 80
Odczyt z pliku................................................... ................................................... ...... 80
Otwieranie pliku w celu odczytu — fopen() ................................................... ......... 81
Wiedzie膰, kiedy przesta膰 — feof() ................................................... ...................... 82
Odczytywanie pliku wiersz po wierszu — fgets(), fgetss() i fgetcsv() ........................ 82
Odczyt ca艂ego pliku — readfile(), fpassthru(), file() ................................................. 83
Odczyt pojedynczego znaku — fgetc() ................................................... ................ 84
Odczytywanie zadanej d艂ugo艣ci — fread() ................................................... ........... 84
Inne przydatne funkcje plikowe ................................................... ................................ 85
Sprawdzanie istnienia pliku — file_exists()................................................... .......... 85
Okre艣lanie wielko艣ci pliku — filesize() ................................................... ............... 85
Kasowanie pliku — unlink() ................................................... ............................... 85
Poruszanie si臋 wewn膮trz pliku — rewind(), fseek() i ftell()....................................... 85
Blokowanie pliku ................................................... ................................................... . 86
Lepszy spos贸b obr贸bki danych — systemy zarz膮dzania bazami danych .......................... 88
Problemy zwi膮zane ze stosowaniem plik贸w jednorodnych....................................... 88
Jak RDBMS rozwi膮zuj膮 powy偶sze problemy?................................................... ...... 88
Propozycje dalszych lektur................................................... ....................................... 89
W nast臋pnym rozdziale................................................... ............................................ 89
Spis tre艣ci 7
!"
Czym s膮 tablice? ................................................... ................................................... .. 91
Tablice indeksowane numerycznie................................................... ............................ 92
Inicjowanie tablic indeksowanych numerycznie................................................... .... 92
Dost臋p do zawarto艣ci tablicy................................................... ............................... 93
Dost臋p do tablic przy zastosowaniu p臋tli................................................... .............. 94
Tablice asocjacyjne ................................................... ................................................. 94
Inicjowanie tablicy asocjacyjnej................................................... .......................... 94
Dost臋p do element贸w tablicy ................................................... .............................. 95
Stosowanie p臋tli z tablicami asocjacyjnymi................................................... .......... 95
Tablice wielowymiarowe ................................................... ......................................... 97
Sortowanie tablic................................................... ................................................... 100
Stosowanie funkcji sort()................................................... .................................. 100
Stosowanie funkcji asort() i ksort() do porz膮dkowania tablic asocjacyjnych............. 101
Sortowanie odwrotne ................................................... ....................................... 101
Sortowanie tablic wielowymiarowych................................................... ..................... 101
Typy sortowa艅 definiowane przez u偶ytkownika................................................... .. 102
Odwrotne sortowanie zdefiniowane przez u偶ytkownika.......................................... 103
Zmiany kolejno艣ci element贸w w tablicach................................................... ............... 104
Stosowanie funkcji shuffle() ................................................... ............................. 104
Stosowanie funkcji array_reverse()................................................... .................... 105
艁adowanie tablic z plik贸w................................................... ...................................... 106
Inne dzia艂ania na tablicach................................................... ..................................... 109
Poruszanie si臋 wewn膮trz tablicy — funkcje each(), current(), reset(), end(),
next(), pos() i prev()................................................... ...................................... 109
Do艂膮czanie dowolnej funkcji do ka偶dego elementu tablicy — funkcja array_walk().. 110
Liczenie element贸w tablicy: count(), sizeof() i array_count_values() ....................... 111
Konwersja tablic na zmienne skalarne — funkcja extract() ..................................... 112
Propozycje dalszych lektur................................................... ..................................... 113
W nast臋pnym rozdziale................................................... .......................................... 113
# $ " %& ' ( & " )
Przyk艂adowa aplikacja — Inteligentny Formularz Pocztowy ........................................ 115
Formatowanie ci膮g贸w................................................... ............................................ 117
Przycinanie ci膮g贸w — funkcje chop(), ltrim() i trim() ............................................ 117
Formatowanie ci膮g贸w w celu ich prezentacji................................................... ...... 118
Formatowanie ci膮g贸w do przechowania — funkcje AddSlashes() i StripSlashes() .... 121
艁膮czenie i rozdzielanie ci膮g贸w za pomoc膮 funkcji ci膮g贸w ........................................... 122
Stosowanie funkcji explode(), implode() i join() ................................................... . 123
Stosowanie funkcji strtok() ................................................... ............................... 124
Stosowanie funkcji substr()................................................... ............................... 124
Por贸wnywanie ci膮g贸w ................................................... ........................................... 125
Porz膮dkowanie ci膮g贸w — funkcje strcmp(), strcasecmp() i strnatcmp()................... 125
Sprawdzanie d艂ugo艣ci ci膮gu za pomoc膮 funkcji strlen() .......................................... 126
Dopasowywanie i zamiana podci膮g贸w za pomoc膮 funkcji ci膮g贸w................................. 126
Znajdowanie ci膮g贸w w ci膮gach — funkcje strstr(), strchr(), strrchr() i stristr().......... 127
Odnajdywanie pozycji podci膮gu — funkcje strpos() i strrpos() ............................... 128
Zamiana podci膮g贸w — funkcje str_replace() i substr_replace()............................... 129
Wprowadzenie do wyra偶e艅 regularnych................................................... .................. 130
Podstawy................................................... ................................................... ..... 130
Zbiory i klasy znak贸w................................................... ...................................... 131
Powtarzalno艣膰 ................................................... ................................................. 132
Podwyra偶enia................................................... .................................................. 132
Podwyra偶enia policzalne ................................................... .................................. 132
Kotwiczenie na pocz膮tku lub na ko艅cu ci膮gu................................................... ...... 133
Rozga艂臋zianie................................................... .................................................. 133
8 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Dopasowywanie specjalnych znak贸w literowych ................................................... 133
Podsumowanie znak贸w specjalnych................................................... .................. 133
Umieszczanie wszystkiego razem (Inteligentny Formularz) .................................... 134
Odnajdywanie podci膮g贸w za pomoc膮 wyra偶e艅 regularnych.......................................... 135
Zamiana podci膮g贸w za pomoc膮 wyra偶e艅 regularnych.................................................. 136
Rozdzielanie ci膮g贸w za pomoc膮 wyra偶e艅 regularnych................................................. 136
Por贸wnanie funkcji ci膮g贸w i funkcji wyra偶e艅 regularnych........................................... 137
Propozycje dalszych lektur................................................... ..................................... 137
W nast臋pnym rozdziale................................................... .......................................... 137
) * +
Dlaczego ponownie stosowa膰 kod? ................................................... ......................... 139
Koszt.................................................. ................................................... ............ 140
Niezawodno艣膰 ................................................... ................................................. 140
Sp贸jno艣膰................................................... ................................................... ...... 140
Stosowanie funkcji require() i include()................................................... ................... 140
Stosowanie funkcji require() ................................................... ............................. 141
Rozszerzenia plik贸w i require()................................................... ......................... 142
Znaczniki PHP i require()................................................... ................................. 142
Stosowanie require() w szablonach stron WWW ................................................... ...... 142
Stosowanie opcji auto_prepend_file i auto_append_file.......................................... 147
Stosowanie funkcji include()................................................... ............................. 148
Stosowanie funkcji w PHP................................................... ..................................... 149
Wywo艂ywanie funkcji ................................................... ...................................... 150
Wywo艂anie niezdefiniowanej funkcji................................................... ................. 151
Wielko艣膰 liter a nazwy funkcji ................................................... .......................... 152
Dlaczego powinno si臋 definiowa膰 w艂asne funkcje?................................................... ... 152
Podstawowa struktura funkcji................................................... ................................. 152
Nadawanie nazwy funkcji................................................... ................................. 153
Parametry................................................... ................................................... .......... 154
Zasi臋g ................................................... ................................................... ............... 156
Przekazanie przez referencj臋 czy przekazanie przez warto艣膰?....................................... 158
Powr贸t z funkcji................................................... ................................................... . 159
Zwracanie warto艣ci przez funkcje ................................................... ........................... 160
Bloki kodu ................................................... ................................................... ... 161
Rekurencja ................................................... ................................................... ........ 162
Propozycje dalszych lektur................................................... ..................................... 164
W nast臋pnym rozdziale................................................... .......................................... 164
, ! ,)
Koncepcje programowania obiektowego ................................................... ................. 165
Klasy i obiekty ................................................... ................................................ 165
Polimorfizm ................................................... ................................................... . 167
Dziedziczenie................................................... .................................................. 167
Tworzenie klas, atrybut贸w i operacji w PHP................................................... ............ 168
Struktura klasy ................................................... ................................................ 168
Konstruktory................................................... ................................................... 168
Tworzenie egzemplarzy ................................................... ......................................... 169
Stosowanie atrybut贸w klasy ................................................... ................................... 169
Wywo艂ywanie operacji klas................................................... .................................... 171
Implementacja dziedziczenia w PHP................................................... ....................... 172
Uniewa偶nianie................................................... ................................................. 173
Wielodziedziczenie................................................... .......................................... 174
Tworzenie klas................................................... ................................................... ... 175
Tworzenie kodu dla w艂asnej klasy................................................... ........................... 175
W nast臋pnej cz臋艣ci ................................................... ................................................ 183
Spis tre艣ci 9
+ + ! -
Koncepcje relacyjnych baz danych ................................................... ......................... 188
Tabele ................................................... ................................................... ......... 188
Kolumny................................................... ................................................... ...... 188
Wiersze ................................................... ................................................... ....... 188
Warto艣ci ................................................... ................................................... ...... 188
Klucze ................................................... ................................................... ......... 189
Schematy................................................... ................................................... ..... 190
Relacje ................................................... ................................................... ........ 190
Jak zaprojektowa膰 internetow膮 baz臋 danych? ................................................... .......... 191
Okre艣l obiekty 艣wiata realnego, kt贸rych model chcesz wykona膰 ............................. 191
Unikaj przechowywania redundantnych danych ................................................... . 191
Zapisuj atomowe warto艣ci kolumn ................................................... .................... 193
Dobierz w艂a艣ciwe klucze ................................................... .................................. 194
Pomy艣l o zapytaniach, kt贸re zadasz bazie ................................................... .......... 194
Unikaj tworzenia tabel z wieloma pustymi polami ................................................. 194
Typy tabel — podsumowanie ................................................... ........................... 195
Architektura internetowej bazy danych................................................... .................... 196
Architektura ................................................... ................................................... . 196
Propozycje dalszych lektur................................................... ..................................... 197
W nast臋pnym rozdziale................................................... .......................................... 197
- . + !
Uwagi na temat u偶ytkowania monitora MySQL ................................................... ....... 200
Jak zalogowa膰 si臋 do serwera MySQL ................................................... .................... 201
Tworzenie baz i rejestrowanie u偶ytkownik贸w ................................................... .......... 202
Tworzenie bazy danych................................................... ................................... 202
U偶ytkownicy i przywileje ................................................... ...................................... 203
Wprowadzenie do systemu przywilej贸w MySQL ................................................... ..... 203
Zasada najmniejszego przywileju ................................................... ...................... 203
Rejestrowanie u偶ytkownik贸w: polecenie GRANT ................................................. 204
Typy i poziomy przywilej贸w ................................................... ............................ 205
Polecenie REVOKE................................................... ......................................... 207
Przyk艂ady u偶ycia polece艅 GRANT i REVOKE................................................... ... 207
Rejestrowanie u偶ytkownika 艂膮cz膮cego si臋 z Internetu .................................................. 208
Wylogowanie si臋 u偶ytkownika root................................................... ................... 209
U偶ywanie odpowiedniej bazy danych................................................... ...................... 209
Tworzenie tabel bazy danych................................................... ................................. 210
Znaczenie dodatkowych atrybut贸w kolumn................................................... ........ 211
Typy kolumn................................................... ................................................... 212
Rzut oka na baz臋 danych — polecenia SHOW i DESCRIBE .................................. 214
Identyfikatory MySQL ................................................... .......................................... 215
Typy danych w kolumnach ................................................... .................................... 216
Typy liczbowe................................................... ................................................. 216
Propozycje dalszych lektur................................................... ..................................... 220
W nast臋pnym rozdziale................................................... .......................................... 220
! % $ /0
Czym jest SQL?................................................... ................................................... . 221
Zapisywanie danych do bazy................................................... .................................. 222
Wyszukiwanie danych w bazie ................................................... ............................... 224
Wyszukiwanie danych spe艂niaj膮cych okre艣lone kryteria ......................................... 225
Wyszukiwanie danych w wielu tabelach ................................................... ............ 227
10 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Szeregowanie danych w okre艣lonym porz膮dku................................................... ... 232
Grupowanie i agregowanie danych................................................... .................... 233
Wskazanie wierszy, kt贸re maj膮 by膰 wy艣wietlone ................................................... 235
Dokonywanie zmian rekord贸w w bazie danych................................................... ........ 235
Zmiana struktury istniej膮cych tabel ................................................... ......................... 236
Usuwanie rekord贸w z bazy danych................................................... ......................... 237
Usuwanie tabel................................................... ................................................... ... 238
Usuwanie ca艂ych baz danych................................................... .................................. 238
Propozycje dalszych lektur................................................... ..................................... 238
W nast臋pnym rozdziale................................................... .......................................... 238
1 2% 3 ! % $ /0 ' %
Jak dzia艂a internetowa baza danych? ................................................... ....................... 240
Etapy wysy艂ania zapyta艅 do bazy danych z poziomu strony WWW .............................. 243
Sprawdzenie poprawno艣ci wpisanych danych ................................................... .......... 243
Ustanawianie po艂膮czenia z baz膮 danych................................................... .................. 244
Wyb贸r w艂a艣ciwej bazy danych................................................... ............................... 246
Wysy艂anie zapyta艅 do bazy danych................................................... ........................ 246
Odczytywanie rezultat贸w zapyta艅................................................... ........................... 247
Zamykanie po艂膮czenia z baz膮 danych................................................... ...................... 248
Wstawianie nowych danych do bazy................................................... ....................... 248
Inne u偶yteczne funkcje PHP i MySQL ................................................... .................... 252
Zwalnianie zasob贸w ................................................... ........................................ 252
Tworzenie i usuwanie baz danych................................................... ..................... 252
Inne interfejsy bazodanowe PHP ................................................... ............................ 252
Stosowanie og贸lnego intrefejsu bazodanowego: PEAR DB.......................................... 253
Propozycje dalszych lektur................................................... ..................................... 256
W nast臋pnym rozdziale................................................... .......................................... 256
$ /0 " )
Szczeg贸艂y systemu przywilej贸w ................................................... ............................. 257
Tabela user ................................................... ................................................... .. 258
Tabele db i host................................................... ............................................... 259
Tabele tables_priv i columns_priv ................................................... ..................... 261
Kontrola dost臋pu: w jaki spos贸b MySQL u偶ywa tabel przywilej贸w......................... 261
Zmiana przywilej贸w: kiedy zmiany zostan膮 uwzgl臋dnione?.................................... 262
Ochrona bazy danych ................................................... ............................................ 263
MySQL z perspektywy systemu operacyjnego ................................................... ... 263
Has艂a ................................................... ................................................... ........... 263
Przywileje u偶ytkownik贸w................................................... ................................. 264
MySQL i Internet ................................................... ............................................ 265
Uzyskiwanie szczeg贸艂owych informacji o bazie danych............................................... 265
Uzyskiwanie informacji poleceniem SHOW ................................................... ...... 266
Uzyskiwanie informacji o kolumnach za pomoc膮 polecenia DESCRIBE ................. 267
Jak wykonywane s膮 zapytania: polecenie EXPLAIN.............................................. 268
Przyspieszanie wykonania zapyta艅 za pomoc膮 indeks贸w ............................................. 271
Wskaz贸wki dotycz膮ce optymalizacji ................................................... ....................... 271
Optymalizacja projektu bazy danych................................................... ................. 272
Przywileje................................................... ................................................... .... 272
Optymalizacja tabel ................................................... ......................................... 272
Stosowanie indeks贸w ................................................... ....................................... 272
U偶ywanie warto艣ci domy艣lnych................................................... ........................ 273
U偶ywanie sta艂ych po艂膮cze艅 z baz膮................................................... ..................... 273
Wi臋cej wskaz贸wek ................................................... .......................................... 273
R贸偶ne typy tabel ................................................... ................................................... 273
Spis tre艣ci 11
艁adowanie danych z pliku................................................... ...................................... 274
Tworzenie kopii zapasowej bazy danych MySQL ................................................... .... 274
Przywracanie bazy danych MySQL ................................................... ........................ 275
Propozycje dalszych lektur................................................... ..................................... 275
W nast臋pnej cz臋艣ci ................................................... ................................................ 275
! " # $ %%
4 ' +
Co chcemy osi膮gn膮膰? ................................................... ............................................ 279
Rodzaje komercyjnych stron WWW ................................................... ....................... 279
Broszury internetowe ................................................... ....................................... 280
Przyjmowanie zam贸wie艅 na produkty i us艂ugi ................................................... .... 283
Dostarczanie us艂ug lub wyrob贸w maj膮cych posta膰 cyfrow膮.................................... 287
Zwi臋kszanie warto艣ci produkt贸w i us艂ug................................................... ............ 288
Ograniczanie koszt贸w ................................................... ...................................... 288
Ryzyko i zagro偶enia ................................................... .............................................. 289
Crackerzy ................................................... ................................................... .... 289
Przyci膮gni臋cie niewystarczaj膮cej liczby klient贸w .................................................. 290
Awarie sprz臋tu komputerowego ................................................... ........................ 290
Awarie sieci elektrycznych, komunikacyjnych i komputerowych
oraz systemu wysy艂kowego................................................... ............................ 291
Silna konkurencja ................................................... ............................................ 291
B艂臋dy w oprogramowaniu................................................... ................................. 291
Zmiany polityki rz膮dowej................................................... ................................. 292
Ograniczenie pojemno艣ci system贸w ................................................... .................. 292
Wyb贸r strategii ................................................... ................................................... .. 292
W nast臋pnym rozdziale................................................... .......................................... 293
5 6 ' + )
Jak膮 wag臋 maj膮 posiadane przez nas informacje? ................................................... ..... 296
Zagro偶enia bezpiecze艅stwa ................................................... .................................... 296
Ujawnienie informacji poufnych................................................... ....................... 297
Utrata lub zniszczenie danych................................................... ........................... 299
Modyfikacje danych................................................... ........................................ 299
Blokada us艂ugi................................................... ................................................. 300
B艂臋dy w oprogramowaniu................................................... ................................. 301
Zaprzeczenie korzystania z us艂ugi ................................................... ..................... 303
R贸wnowa偶enie u偶yteczno艣ci, wydajno艣ci, koszt贸w i bezpiecze艅stwa............................ 304
Opracowanie polityki bezpiecze艅stwa ................................................... ..................... 305
Zasady uwierzytelniania................................................... ......................................... 305
Wykorzystanie mechanizmu uwierzytelniania................................................... .......... 306
Podstawy szyfrowania ................................................... ........................................... 307
Szyfrowanie z kluczem prywatnym.................................................. .......................... 308
Szyfrowanie z kluczem publicznym ................................................... ........................ 309
Podpis cyfrowy................................................... ................................................... .. 310
Certyfikaty cyfrowe................................................... ............................................... 311
Bezpieczne serwery WWW................................................... .................................... 312
Monitorowanie i zapisywanie zdarze艅................................................... ..................... 314
Zapory sieciowe ................................................... ................................................... . 314
Tworzenie kopii zapasowych................................................... .................................. 315
Tworzenie kopii zapasowych zwyk艂ych plik贸w ................................................... .. 315
Tworzenie kopii zapasowych i odzyskiwanie baz danych MySQL .......................... 316
Bezpiecze艅stwo fizyczne ................................................... ....................................... 316
W nast臋pnym rozdziale................................................... .......................................... 317
12 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
# 7 " ( $ /0
Identyfikacja u偶ytkownik贸w................................................... ................................... 319
Implementacja kontroli dost臋pu ................................................... .............................. 320
Przechowywanie hase艂 dost臋pu ................................................... ......................... 323
Szyfrowanie hase艂................................................... ............................................ 325
Zastrzeganie wi臋cej ni偶 jednej strony ................................................... ................ 327
Podstawowa metoda uwierzytelniania ................................................... ..................... 327
Wykorzystanie podstawowej metody uwierzytelniania w PHP ..................................... 329
Wykorzystanie podstawowej metody uwierzytelniania na serwerze Apache
przy u偶yciu plik贸w .htaccess ................................................... ............................... 330
Wykorzystanie podstawowej metody uwierzytelniania na serwerze IIS ......................... 334
Wykorzystanie modu艂u mod_auth_mysql do cel贸w uwierzytelniania ............................ 337
Instalacja modu艂u mod_auth_mysql................................................... ................... 337
Zadzia艂a艂o? ................................................... ................................................... .. 338
Praca z mod_auth_mysql................................................... .................................. 338
Implementacja w艂asnej metody uwierzytelniania ................................................... ...... 339
Propozycje dalszych lektur................................................... ..................................... 340
W nast臋pnym rozdziale................................................... .......................................... 340
) 8 ! + ( $ /0 #
Zapewnienie bezpiecze艅stwa transakcji................................................... ................... 341
Komputer u偶ytkownika ................................................... .................................... 342
Internet................................................... ................................................... ........ 344
System docelowy................................................... ............................................. 345
Wykorzystanie protoko艂u Secure Sockets Layer (SSL) ................................................ 346
Kontrola danych pochodz膮cych od u偶ytkownika ................................................... ...... 349
Bezpieczne przechowywanie danych................................................... ....................... 350
Cel przechowywania numer贸w kart kredytowych................................................... ..... 352
Szyfrowanie danych w PHP ................................................... ................................... 352
Propozycje dalszych lektur................................................... ..................................... 361
W nast臋pnej cz臋艣ci ................................................... ................................................ 361
& ' ( ) *+*
, 9 + ' ' " : ' ,)
Wprowadzenie do wysy艂ania plik贸w ................................................... ....................... 365
Kod HTML s艂u偶膮cy do wysy艂ania plik贸w ................................................... .......... 366
Uwaga na temat bezpiecze艅stwa ................................................... ....................... 367
Tworzenie obs艂uguj膮cego plik PHP................................................... ................... 367
Najcz臋艣ciej spotykane problemy ................................................... ....................... 372
Stosowanie funkcji katalogowych................................................... ........................... 372
Odczyt z katalog贸w ................................................... ......................................... 373
Otrzymywanie informacji na temat aktualnego katalogu......................................... 374
Tworzenie i usuwanie katalog贸w................................................... ....................... 374
Interakcja z systemem plik贸w................................................... ................................. 375
Otrzymywanie informacji o pliku ................................................... ...................... 375
Zmiana w艂a艣ciwo艣ci pliku ................................................... ................................ 378
Tworzenie, usuwanie i przenoszenie plik贸w ................................................... ....... 378
Stosowanie funkcji uruchamiaj膮cych programy................................................... ........ 379
Interakcja ze 艣rodowiskiem: funkcje getenv() i putenv()............................................... 382
Propozycje dalszych lektur................................................... ..................................... 382
W nast臋pnym rozdziale................................................... .......................................... 382
* + -
Przegl膮d protoko艂贸w................................................... .............................................. 383
Wysy艂anie i odczytywanie poczty elektronicznej................................................... ...... 384
Spis tre艣ci 13
Korzystanie z innych us艂ug WWW ................................................... ......................... 384
Stosowanie funkcji po艂膮cze艅 sieciowych................................................... ................. 387
Korzystanie z FTP ................................................... ................................................ 391
Stosowanie FTP w celu utworzenia kopii bezpiecze艅stwa lub kopii lustrzanej pliku .... 391
Wysy艂anie plik贸w ................................................... ............................................ 397
Unikanie przekroczenia dopuszczalnego czasu ................................................... ... 398
Stosowanie innych funkcji FTP ................................................... ........................ 398
Stosowanie og贸lnej komunikacji sieciowej za pomoc膮 cURL....................................... 399
Propozycje dalszych lektur................................................... ..................................... 401
W nast臋pnym rozdziale................................................... .......................................... 402
- 8 % % ' #1
Uzyskiwanie informacji o dacie i czasie w PHP ................................................... ....... 403
Stosowanie funkcji date() ................................................... ................................. 403
Obs艂uga znacznik贸w czasu Uniksa ................................................... .................... 405
Stosowanie funkcji getdate()................................................... ............................. 406
Sprawdzanie poprawno艣ci dat ................................................... ........................... 406
Konwersja pomi臋dzy formatami daty PHP i MySQL................................................... 407
Obliczanie dat................................................... ................................................... .... 407
Stosowanie funkcji kalendarzowych................................................... ........................ 409
Propozycje dalszych lektur................................................... ..................................... 410
W nast臋pnym rozdziale................................................... .......................................... 410
; ! : #
Konfigurowanie obs艂ugi obrazk贸w w PHP ................................................... .............. 411
Formaty obrazk贸w ................................................... ................................................ 412
JPEG................................................... ................................................... ........... 412
PNG................................................... ................................................... ............ 413
WBMP................................................... ................................................... ........ 413
GIF ................................................... ................................................... ............. 413
Tworzenie obrazk贸w ................................................... ............................................. 414
Tworzenie kadru obrazka ................................................... ................................. 415
Rysowanie lub umieszczanie tekstu w obrazku................................................... ... 416
Wy艣wietlanie ostatecznej grafiki ................................................... ....................... 417
Ko艅cowe czynno艣ci porz膮dkuj膮ce................................................... ..................... 419
Stosowanie automatycznie generowanych obrazk贸w na innych stronach ....................... 419
Stosowanie tekstu i czcionek do tworzenia obrazk贸w .................................................. 420
Konfiguracja podstawowego kadru................................................... .................... 423
Dopasowanie tekstu do przycisku................................................... ...................... 423
Nadawanie tekstowi odpowiedniej pozycji ................................................... ......... 426
Wpisywanie tekstu do przycisku ................................................... ....................... 427
Etap ko艅cowy ................................................... ................................................. 427
Rysowanie figur i wykres贸w danych................................................... ....................... 427
Inne funkcje obrazk贸w ................................................... .......................................... 435
Propozycje dalszych lektur................................................... ..................................... 435
W nast臋pnym rozdziale................................................... .......................................... 435
1 " + #
Czym jest kontrola sesji? ................................................... ....................................... 437
Podstawowa zasada dzia艂ania sesji ................................................... .......................... 438
Czym jest cookie? ................................................... ........................................... 438
Konfiguracja cookies w PHP ................................................... ............................ 439
Stosowanie cookies w sesji ................................................... ............................... 439
Przechowywanie identyfikatora sesji ................................................... ................. 440
14 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Implementacja prostych sesji................................................... .................................. 440
Rozpoczynanie sesji................................................... ......................................... 440
Zg艂aszanie zmiennych sesji................................................... ............................... 441
Stosowanie zmiennych sesji................................................... .............................. 441
Usuwanie zmiennych i niszczenie sesji ................................................... .............. 442
Przyk艂ad prostej sesji................................................... ............................................. 442
Konfiguracja kontroli sesji ................................................... ..................................... 445
Implementacja uwierzytelniania w kontroli sesji ................................................... ...... 446
Propozycje dalszych lektur................................................... ..................................... 451
W nast臋pnym rozdziale................................................... .......................................... 452
9 < #)
Stosowanie magicznych cudzys艂ow贸w ................................................... .................... 453
Wykonywanie ci膮g贸w — funkcja eval() ................................................... .................. 454
Zako艅czenie wykonania — die i exit................................................... ....................... 455
Serializacja ................................................... ................................................... ........ 455
Pobieranie informacji na temat 艣rodowiska PHP ................................................... ...... 456
Uzyskiwanie informacji na temat za艂adowanych rozszerze艅 ................................... 457
Identyfikacja w艂a艣ciciela skryptu................................................... ....................... 457
Uzyskiwanie informacji na temat daty modyfikacji skryptu .................................... 457
Dynamiczne dodawanie rozszerze艅................................................... ......................... 458
Czasowa zmiana 艣rodowiska wykonawczego ................................................... ........... 458
Pod艣wietlanie 藕r贸de艂................................................... .............................................. 459
W nast臋pnej cz臋艣ci ................................................... ................................................ 460
& , ! #! ) ( #! - ) . /+
$ /0 ( + #,
Zastosowanie in偶ynierii oprogramowania w tworzeniu aplikacji WWW........................ 464
Planowanie i prowadzenie projektu aplikacji WWW ................................................... 464
Ponowne stosowanie kodu ................................................... ..................................... 465
Tworzenie kodu 艂atwego w utrzymaniu ................................................... ................... 466
Standardy kodowania................................................... ....................................... 466
Dzielenie kodu ................................................... ................................................ 469
Stosowanie standardowej struktury katalog贸w................................................... .... 470
Dokumentacja i dzielenie wewn臋trznych funkcji ................................................... 470
Implementacja kontroli wersji ................................................... ................................ 470
Wyb贸r 艣rodowiska programistycznego ................................................... .................... 472
Dokumentacja projekt贸w ................................................... ....................................... 472
Prototypowanie................................................... ................................................... .. 473
Oddzielanie logiki i zawarto艣ci ................................................... ............................... 474
Optymalizacja kodu................................................... ............................................... 475
Stosowanie prostych optymalizacji................................................... .................... 475
Stosowanie produkt贸w firmy Zend................................................... .................... 476
Testowanie ................................................... ................................................... ........ 476
Propozycje dalszych lektur................................................... ..................................... 477
W nast臋pnym rozdziale................................................... .......................................... 478
7 ! 3 : #
B艂臋dy programistyczne ................................................... .......................................... 479
B艂臋dy sk艂adni ................................................... .................................................. 480
B艂臋dy wykonania ................................................... ............................................. 481
B艂臋dy logiczne................................................... ................................................. 486
Pomoc w usuwaniu b艂臋d贸w w zmiennych................................................... ................ 488
Poziomy zg艂aszania b艂臋d贸w................................................... .................................... 489
Spis tre艣ci 15
Zmiana ustawie艅 zg艂aszania b艂臋d贸w................................................... ........................ 491
Wyzwalanie w艂asnych b艂臋d贸w................................................... ................................ 492
Elegancka obs艂uga b艂臋d贸w ................................................... ..................................... 492
W nast臋pnym rozdziale................................................... .......................................... 494
# . " ( : " + # )
Problem ................................................... ................................................... ............ 495
Sk艂adniki rozwi膮zania................................................... ............................................ 496
Identyfikacja u偶ytkownika i personalizacja ................................................... ........ 496
Przechowywanie zak艂adek................................................... ................................ 497
Rekomendowanie zak艂adek................................................... ............................... 497
Przegl膮d rozwi膮zania ................................................... ............................................. 497
Implementacja bazy danych................................................... ................................... 498
Implementacja podstawowej witryny ................................................... ...................... 500
Implementacja uwierzytelniania u偶ytkownik贸w ................................................... ....... 503
Rejestracja ................................................... ................................................... ... 503
Logowanie ................................................... ................................................... ... 509
Wylogowanie ................................................... .................................................. 512
Zmiana has艂a ................................................... ................................................... 513
Ustawianie zapomnianych hase艂................................................... ........................ 515
Implementacja przechowywania i odczytywania zak艂adek............................................ 519
Dodawanie zak艂adek ................................................... ........................................ 520
Wy艣wietlanie zak艂adek................................................... ..................................... 522
Usuwanie zak艂adek ................................................... .......................................... 523
Implementacja rekomendacji ................................................... .................................. 525
Rozwijanie projektu i mo偶liwe rozszerzenia ................................................... ............ 529
W nast臋pnym rozdziale................................................... .......................................... 529
) . )
Problem ................................................... ................................................... ............ 531
Sk艂adniki rozwi膮zania................................................... ............................................ 532
Tworzenie katalogu online................................................... ................................ 532
艢ledzenie zakup贸w u偶ytkownika podczas przegl膮dania .......................................... 532
P艂atno艣膰................................................... ................................................... ....... 532
Interfejs administratora................................................... ..................................... 533
Przegl膮d rozwi膮zania ................................................... ............................................. 533
Implementacja bazy danych................................................... ................................... 536
Implementacja katalogu online ................................................... ............................... 538
Przedstawianie kategorii................................................... ................................... 540
Wy艣wietlanie ksi膮偶ek danej kategorii ................................................... ................ 543
Przedstawianie szczeg贸艂owych danych ksi膮偶ki ................................................... ... 544
Implementacja koszyka na zakupy................................................... .......................... 546
Stosowanie skryptu pokaz_kosz.php ................................................... ................. 546
Podgl膮d koszyka................................................... .............................................. 549
Dodawanie produkt贸w do koszyka................................................... .................... 551
Zapisywanie uaktualnionego koszyka ................................................... ................ 553
Wy艣wietlanie podsumowania w pasku nag艂贸wka ................................................... 554
Pobyt w kasie................................................... .................................................. 554
Implementacja p艂atno艣ci................................................... ......................................... 559
Implementacja interfejsu administratora ................................................... .................. 561
Rozwijanie projektu ................................................... .............................................. 567
Zastosowanie istniej膮cego systemu ................................................... ......................... 568
W nast臋pnym rozdziale................................................... .......................................... 568
16 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
, . ' % < % ),
Problem ................................................... ................................................... ............ 569
Wymagania systemu................................................... .............................................. 570
Edycja zawarto艣ci ................................................... ................................................. 570
Umieszczanie zawarto艣ci w systemie................................................... ................. 570
Bazy danych czy pliki?................................................... ..................................... 571
Struktura dokumentu ................................................... ....................................... 572
Stosowanie metadanych................................................... ......................................... 572
Formatowanie danych wyj艣ciowych................................................... ........................ 573
Manipulacja obrazkiem................................................... .......................................... 574
Projekt/przegl膮d rozwi膮zania................................................... .................................. 576
Projektowanie bazy danych................................................... .................................... 576
Implementacja ................................................... ................................................... ... 579
Fronton systemu................................................... .............................................. 579
Wn臋trze systemu ................................................... ............................................. 582
Wyszukiwanie................................................... ................................................. 590
Ekran redaktora naczelnego ................................................... .............................. 593
Rozwijanie projektu ................................................... .............................................. 594
W nast臋pnym rozdziale................................................... .......................................... 594
. " + & ) )
Problem ................................................... ................................................... ............ 595
Sk艂adniki rozwi膮zania................................................... ............................................ 596
Przegl膮d rozwi膮zania ................................................... ............................................. 597
Konfiguracja bazy danych................................................... ...................................... 599
Architektura skryptu................................................... .............................................. 601
Logowanie i wylogowanie ................................................... ..................................... 606
Konfiguracja kont ................................................... ................................................. 609
Tworzenie nowego konta ................................................... ................................. 611
Modyfikacja istniej膮cego konta................................................... ......................... 612
Usuwanie konta................................................... ............................................... 612
Odczytywanie poczty ................................................... ............................................ 613
Wyb贸r konta ................................................... ................................................... 613
Przegl膮danie zawarto艣ci skrzynki ................................................... ...................... 616
Odczytywanie wiadomo艣ci pocztowych................................................... ............. 619
Przegl膮danie nag艂贸wk贸w wiadomo艣ci................................................... ................ 622
Usuwanie wiadomo艣ci................................................... ...................................... 623
Wysy艂anie wiadomo艣ci ................................................... .......................................... 624
Wysy艂anie nowej wiadomo艣ci................................................... ........................... 624
Odpowiadanie i przekazywanie poczty ................................................... .............. 626
Rozwijanie projektu ................................................... .............................................. 627
W nast臋pnym rozdziale................................................... .......................................... 628
- . ' ( " ,
Problem ................................................... ................................................... ............ 629
Sk艂adniki rozwi膮zania................................................... ............................................ 630
Konfiguracja bazy danych list i abonent贸w ................................................... ........ 630
Wysy艂anie plik贸w ................................................... ............................................ 630
Wysy艂anie wiadomo艣ci z za艂膮cznikami ................................................... .............. 631
Przegl膮d rozwi膮zania ................................................... ............................................. 631
Konfiguracja bazy danych................................................... ...................................... 632
Architektura skryptu................................................... .............................................. 635
Implementacja logowania................................................... ....................................... 642
Tworzenie nowego konta ................................................... ................................. 643
Logowanie ................................................... ................................................... ... 646
Spis tre艣ci 17
Implementacja funkcji u偶ytkownika................................................... ........................ 648
Przegl膮danie list ................................................... .............................................. 648
Przegl膮danie informacji na temat listy ................................................... ............... 653
Przegl膮danie archiwum listy ................................................... ............................. 655
Zapisywanie i wypisywanie ................................................... .............................. 656
Zmiana konfiguracji konta................................................... ................................ 657
Zmiana has艂a ................................................... ................................................... 657
Wylogowanie ................................................... .................................................. 659
Implementacja funkcji administratora................................................... ...................... 660
Tworzenie nowej listy ................................................... ...................................... 660
Wysy艂anie nowych wiadomo艣ci ................................................... ........................ 662
Obs艂uga wysy艂ania wielu plik贸w ................................................... ....................... 665
Podgl膮d wiadomo艣ci ................................................... ........................................ 668
Rozsy艂anie wiadomo艣ci ................................................... .................................... 669
Rozwijanie projektu ................................................... .............................................. 675
W nast臋pnym rozdziale................................................... .......................................... 676
. * ' ,
Problem ................................................... ................................................... ............ 677
Sk艂adniki rozwi膮zania................................................... ............................................ 678
Przegl膮d rozwi膮zania ................................................... ............................................. 679
Projektowanie bazy danych................................................... .................................... 680
Przegl膮danie drzewa artyku艂贸w ................................................... .............................. 683
Rozwijanie i zwijanie................................................... ....................................... 685
Wy艣wietlanie artyku艂贸w ................................................... ................................... 688
Korzystanie z klasy wezel_drzewa ................................................... .................... 689
Przegl膮danie pojedynczych artyku艂贸w................................................... ..................... 695
Dodawanie nowych artyku艂贸w................................................... ................................ 697
Rozszerzenia................................................... ................................................... ...... 703
Wykorzystanie istniej膮cego systemu ................................................... ....................... 704
W nast臋pnym rozdziale................................................... .......................................... 704
1 . ' : " * ' => 1)
Problem ................................................... ................................................... ............ 705
Ocena format贸w dokument贸w................................................... ................................ 706
Papier................................................... ................................................... .......... 706
ASCII................................................... ................................................... .......... 707
HTML................................................... ................................................... ......... 707
Formaty edytor贸w tekstu................................................... .................................. 707
Format RTF ................................................... ................................................... . 708
PostScript ................................................... ................................................... .... 709
Format PDF................................................... ................................................... . 710
Sk艂adniki rozwi膮zania................................................... ............................................ 710
System pyta艅 i odpowiedzi ................................................... ............................... 711
Oprogramowanie generuj膮ce dokumenty ................................................... ........... 711
Przegl膮d rozwi膮zania ................................................... ............................................. 713
Zadawanie pyta艅 ................................................... ............................................. 714
Ocena odpowiedzi ................................................... ........................................... 716
Tworzenie certyfikatu RTF ................................................... .............................. 718
Tworzenie certyfikatu PDF z szablonu ................................................... .............. 722
Generowanie dokumentu PDF za pomoc膮 PDFlib.................................................. 725
Skrypt „Witaj 艣wiecie” dla PDFlib ................................................... .................... 725
Tworzenie certyfikatu za pomoc膮 PDFlib................................................... ........... 729
Problemy zwi膮zane z nag艂贸wkami ................................................... .......................... 736
Rozwijanie projektu ................................................... .............................................. 736
Propozycje dalszych lektur................................................... ..................................... 736
18 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
4 & ' % ?$0
Problem ................................................... ................................................... ............ 737
Podstawy XML ................................................... ................................................... . 738
Podstawy us艂ug sieciowych................................................... .................................... 742
SOAP................................................... ................................................... .......... 742
WSDL................................................... ................................................... ......... 743
Sk艂adniki rozwi膮zania................................................... ............................................ 743
Konstrukcja koszyka na zakupy ................................................... ........................ 744
Korzystanie z interfejsu us艂ug sieciowych Amazon.com......................................... 744
Wczytywanie dokument贸w XML................................................... ...................... 745
Korzystanie z SOAP za pomoc膮 PHP ................................................... ................ 745
Buforowanie ................................................... ................................................... 745
Opis rozwi膮zania................................................... ................................................... 746
Aplikacja g艂贸wna................................................... ............................................. 750
Wy艣wietlanie listy ksi膮偶ek z danej kategorii................................................... ....... 754
Tworzenie obiektu klasy WynikiWyszukiwania................................................... .. 757
Przesy艂anie dokument贸w XML................................................... ......................... 765
Korzystanie z protoko艂u SOAP ................................................... ......................... 770
Buforowanie danych................................................... ........................................ 772
Konstrukcja koszyka na zakupy ................................................... ........................ 774
Przej艣cie do kasy na witrynie Amazon.com................................................... ........ 777
Instalacja kodu 藕r贸d艂owego ................................................... .................................... 778
Kierunki rozwoju ................................................... .................................................. 778
Literatura................................................... ................................................... ........... 778
0 1 ) |
|
%% |
= |
9 " + # $ /0 |
- |
Uruchamianie PHP jako CGI lub modu艂 serwera................................................... ...... 782
Instalacja Apache, PHP i MySQL w systemie UNIX ................................................... 782
Instalacja przy u偶yciu binari贸w ................................................... ......................... 782
Instalacja przy u偶yciu kod贸w 藕r贸d艂owych................................................... .......... 783
Plik httpd.conf — informacje ko艅cowe................................................... .............. 790
Czy obs艂uga PHP dzia艂a poprawnie?................................................... .................. 790
Czy SSL dzia艂a poprawnie? ................................................... .............................. 792
Instalacja Apache, PHP i MySQL w systemie Windows .............................................. 793
Instalacja MySQL w systemie Windows ................................................... ............ 793
Instalacja serwera Apache w systemie Windows................................................... . 797
Instalacja PHP w systemie Windows ................................................... ................. 799
Instalowanie PEAR ................................................... ............................................... 803
Inne konfiguracje ................................................... .................................................. 804
= 5 8 ! -1)
Zasoby po艣wi臋cone PHP ................................................... ....................................... 805
Zasoby po艣wi臋cone MySQL i SQL................................................... ......................... 807
Zasoby po艣wi臋cone serwerowi Apache................................................... .................... 807
Zasoby po艣wi臋cone tworzeniu stron WWW................................................... ............. 808
-1
Rozdzia艂 8.
W rozdziale tym przedstawimy spos贸b tworzenia bazy danych MySQL, przeznaczonej do udost臋pniania na stronach WWW.
W tym rozdziale zostan膮 poruszone nast臋puj膮ce zagadnienia:
tworzenie bazy danych, u偶ytkownicy i przywileje,
wprowadzenie do systemu przywilej贸w, tworzenie tabel bazy danych,
typy kolumn w MySQL.
R贸wnie偶 i w tym rozdziale pos艂u偶ymy si臋 znanym ju偶 przyk艂adem ksi臋garni internetowej
„Ksi膮偶korama”. Przypomnijmy schemat jej bazy danych:
! "
# ! $
% $ %
Nale偶y r贸wnie偶 przypomnie膰, i偶 nazwy p贸l b臋d膮cych kluczami podstawowymi s膮 podkre-
艣lone lini膮 ci膮g艂膮, a nazwy p贸l b臋d膮cych kluczami obcymi — lini膮 przerywan膮.
W celu przeanalizowania materia艂u zawartego w tym rozdziale nale偶y zapewni膰 sobie do- st臋p do serwera MySQL, co oznacza, 偶e:
Trzeba przeprowadzi膰 instalacj臋 MySQL na serwerze WWW, obejmuj膮c膮 nast臋puj膮ce czynno艣ci:
instalacj臋 plik贸w,
rejestracj臋 u偶ytkownika na serwerze MySQL, zdefiniowanie odpowiedniej 艣cie偶ki dost臋pu,
w razie konieczno艣ci uruchomienie aplikacji ! & $ $ ',
200 Cz臋艣膰 II Stosowanie MySQL
okre艣lenie has艂a administratora,
usuni臋cie u偶ytkownika anonimowego,
uruchomienie serwera MySQL i skonfigurowanie go w taki spos贸b, by uruchamia艂 si臋 automatycznie.
Po wykonaniu wymienionych czynno艣ci mo偶na przyst膮pi膰 do lektury tego rozdzia艂u. Je艣li jednak instalacja nie powiod艂a si臋, nale偶y kierowa膰 si臋 instrukcjami zawartymi
w dodatku A.
Ewentualne b艂臋dy, kt贸re mog膮 wyst膮pi膰 w trakcie wykonywania czynno艣ci opisywanych w tym rozdziale, spowodowane b臋d膮 prawdopodobnie nieprawid艂ow膮 prac膮 serwera MySQL. W takim przypadku nale偶y ponownie przeanalizowa膰 czynno艣ci opisane powy偶ej oraz przedstawione w dodatku A w celu upewnienia
si臋, i偶 MySQL zosta艂 prawid艂owo zainstalowany.
Nale偶y zapewni膰 sobie dost臋p do serwera MySQL zainstalowanego na komputerze znajduj膮cym si臋 w miejscu pracy czytelnika, udost臋pnianego przez dostawc臋 us艂ug internetowych na zdalnym komputerze itp.
W takim przypadku wykonanie zawartych w tym rozdziale przyk艂ad贸w lub utworzenie w艂asnej bazy danych wymaga zarejestrowania przez administratora odpowiedniego u偶ytkownika oraz znajomo艣ci nadanego mu identyfikatora, has艂a dost臋pu i nazwy przypisanej mu bazy danych.
Nie jest konieczne zapoznanie si臋 z tre艣ci膮 podrozdzia艂贸w dotycz膮cych rejestrowania u偶ytkownik贸w i przydzielania im bazy danych, chyba 偶e istnieje potrzeba bardziej precyzyjnego wyja艣nienia administratorowi przedstawionych wcze艣niej wymaga艅. Zwykli u偶ytkownicy nie b臋d膮 wszak偶e mogli samodzielnie tworzy膰 w艂asnych u偶ytkownik贸w i baz danych.
Wszystkie przyk艂ady zawarte w tym rozdziale by艂y uruchamiane na serwerze MySQL
w wersji 3.23.52. Niekt贸re wcze艣niejsze wersje serwera nie posiadaj膮 pewnych mo偶liwo- 艣ci, dlatego te偶 przed rozpocz臋ciem lektury nale偶y zast膮pi膰 starsz膮 wersj臋 now膮 instalacj膮 MySQL. Najnowsz膮 wersj臋 serwera MySQL mo偶na pobra膰 ze strony http://mysql.com.
Nietrudno zauwa偶y膰, 偶e w przyk艂adach przedstawionych w dalszej cz臋艣ci tego rozdzia艂u oraz w rozdziale nast臋pnym ka偶da komenda jest zako艅czona znakiem 艣rednika ((). Infor- muje on serwer MySQL o konieczno艣ci wykonania zadanego polecenia. Opuszczenie 艣red- nika spowoduje brak reakcji serwera, o czym cz臋sto zapominaj膮 u偶ytkownicy, zw艂aszcza niedo艣wiadczeni.
Dzi臋ki temu mechanizmowi mo偶liwe jest r贸wnie偶 przej艣cie do nowego wiersza przed za- ko艅czeniem wpisywania tekstu komendy, co pozwoli艂o na zwi臋kszenie czytelno艣ci przy- k艂ad贸w. Odnalezienie miejsca, w kt贸rym nast膮pi艂o przej艣cie do nowego wiersza, nie po- winno sprawi膰 偶adnych problem贸w — MySQL wy艣wietli tam znak kontynuacji w formie strza艂ki przedstawionej poni偶ej:
Rozdzia艂 8. Tworzenie internetowej bazy danych 201
Symbol ten oznacza, 偶e MySQL czeka na wprowadzenie dalszej cz臋艣ci polecenia. Za
ka偶dym razem, gdy zostanie naci艣ni臋ty klawisz Enter bez wcze艣niejszego wpisania znaku 艣rednika, nast膮pi przej艣cie do nowego wiersza i wy艣wietlenie symbolu strza艂ki.
Warto r贸wnie偶 zapami臋ta膰, 偶e MySQL nie rozr贸偶nia ma艂ych i wielkich liter w polece- niach j臋zyka SQL, mo偶e natomiast je rozr贸偶nia膰 w nazwach baz danych i tabel. Kwestia
ta zostanie poruszona w dalszej cz臋艣ci rozdzia艂u.
W celu zalogowania si臋 do serwera MySQL nale偶y przej艣膰 do wiersza polece艅 systemu operacyjnego i wpisa膰 nast臋puj膮c膮 komend臋:
Znak zach臋ty mo偶e mie膰 inn膮 form臋, zale偶nie od u偶ywanego systemu operacyjnego
i pow艂oki.
Polecenie ! & wywo艂uje monitor MySQL, maj膮cy posta膰 wiersza polece艅 艂膮cz膮cego klienta z serwerem.
Opcji )* u偶ywa si臋 w celu wskazania komputera, do kt贸rego ma nast膮pi膰 po艂膮czenie (na maszynie tej pracuje serwer MySQL). Je艣li polecenie to ma by膰 wykonane na tym samym komputerze, na kt贸rym znajduje si臋 MySQL, to opcja )* oraz parametr
mog膮 zosta膰 pomini臋te. W przeciwnym wypadku konieczne jest wpisanie w miejsce para- metru nazwy maszyny, na kt贸rej uruchomiony jest serwer bazy danych.
Opcja ) jest stosowana w celu wskazania identyfikatora u偶ytkownika, na kt贸rego nast臋- puje logowanie. Je艣li identyfikator ten nie zostanie podany, w贸wczas MySQL domy艣lnie u偶yje identyfikatora tego u偶ytkownika, kt贸ry jest aktualnie zalogowany do systemu ope- racyjnego.
Je艣li MySQL zosta艂 zainstalowany na komputerze lub serwerze czytelnika, b臋dzie on zmu- szony zalogowa膰 si臋 jako u偶ytkownik oraz samodzielnie utworzy膰 baz臋 danych, kt贸-
r膮 b臋dzie wykorzystywa艂 w trakcie uruchamiania zawartych w tym rozdziale przyk艂ad贸w. Przy pierwszym uruchomieniu serwera u偶ytkownik jest jedynym zarejestrowanym u偶ytkownikiem.
W trakcie pracy na serwerze zainstalowanym na komputerze administrowanym przez inn膮 osob臋 nale偶y przy logowaniu u偶y膰 identyfikatora u偶ytkownika, podanego przez ad- ministratora.
Opcja )+ informuje serwer o logowaniu si臋 z u偶yciem has艂a. Mo偶e ona zosta膰 pomini臋- ta, je艣li dla danego u偶ytkownika has艂o nie zosta艂o ustanowione.
Je偶eli czytelnik loguje si臋 jako u偶ytkownik bez konieczno艣ci podania has艂a, zale- cane jest okre艣lenie has艂a dost臋pu zgodnie z instrukcjami zawartymi w dodatku A. Jego brak powoduje, i偶 system b臋dzie niedostatecznie zabezpieczony.
202 Cz臋艣膰 II Stosowanie MySQL
Podawanie has艂a w tym samym wierszu co polecenie ! & nie jest obowi膮zkowe. Je偶eli nie zostanie ono podane, to serwer MySQL sam o nie „zapyta”. Pomini臋cie has艂a jest
w艂a艣ciwie lepszym rozwi膮zaniem, gdy偶 wpisane w wierszu polece艅 b臋dzie mia艂o form臋 zwyk艂ego tekstu, co umo偶liwi osobom postronnym jego wykrycie.
Po wpisaniu komendy podanej na pocz膮tku podrozdzia艂u wy艣wietlona zostanie odpowied藕
w nast臋puj膮cej formie:
(je偶eli to nie nast膮pi, trzeba sprawdzi膰, czy serwer MySQL jest uruchomiony, a komen- da ! & mo偶e by膰 zrealizowana w bie偶膮cej 艣cie偶ce dost臋pu).
Nast臋pnie nale偶y poda膰 has艂o dost臋pu. Je艣li wszystko przebiegnie prawid艂owo, powinien zosta膰 wy艣wietlony komunikat podobny do poni偶szego:
!"# $ % & ' $
( !"# ) * * +$,+$-,
. / &/ /' / $ . /' / 0 $
Je偶eli czytelnik pracuje na w艂asnym komputerze i komunikat nie b臋dzie przypomina艂 po- wy偶szego, w贸wczas nale偶y upewni膰 si臋, czy uruchomiona jest aplikacja ! & $ $ '
(je偶eli jest wymagana) i czy zosta艂o okre艣lone i wpisane prawid艂owo has艂o dost臋pu dla u偶yt- kownika .
Je艣li praca odbywa si臋 na zdalnej maszynie, trzeba upewni膰 si臋, i偶 podane has艂o jest prawid艂owe.
Po zalogowaniu si臋 do serwera kursor powinien znajdowa膰 si臋 przy znaku zach臋ty, umo偶- liwiaj膮c stworzenie nowej bazy danych.
Czytelnik pracuj膮cy na w艂asnym komputerze powinien stosowa膰 si臋 do instrukcji poda- nych w dalszej cz臋艣ci rozdzia艂u.
Czytelnik korzystaj膮cy z maszyny administrowanej przez inn膮 osob臋 powinien mie膰 utwo- rzon膮 i przypisan膮 mu baz臋 danych, mo偶e wi臋c od razu przej艣膰 do lektury podrozdzia艂u
„U偶ywanie odpowiedniej bazy danych”. Mo偶na oczywi艣cie zapozna膰 si臋 z poprzedzaj膮cymi
go podrozdzia艂ami, nie b臋dzie jednak mo偶liwo艣ci (a przynajmniej nie powinno by膰) uru- chamiania wyszczeg贸lnionych w nich polece艅.
System baz danych MySQL jest w stanie obs艂ugiwa膰 wiele baz danych jednocze艣nie. Za- zwyczaj jedna aplikacja wsp贸艂pracuje z jedn膮 baz膮 danych. Dla ksi臋garni „Ksi膮偶korama” baza ta nosi nazw臋 .
To czynno艣膰 najprostsza. W wierszu polece艅 MySQL nale偶y wpisa膰:
Rozdzia艂 8. Tworzenie internetowej bazy danych 203
W miejsce nale偶y poda膰 nazw臋 bazy danych, kt贸ra ma zosta膰 utworzona. W na-
szym przyk艂adzie jest to baza o nazwie .
I to wszystko! Otrzymana odpowied藕 powinna wygl膮da膰 mniej wi臋cej tak:
" 123 ) 45$56 7
Oznacza to, 偶e operacja zosta艂a wykonana bez b艂臋d贸w. Je艣li taki komunikat si臋 nie pojawi, nale偶y upewni膰 si臋, 偶e na ko艅cu komendy zosta艂 wpisany znak 艣rednika. Informuje on ser- wer MySQL o zako艅czeniu wpisywania polecenia i o konieczno艣ci jego wykonania.
!
System MySQL mo偶e obs艂ugiwa膰 wielu u偶ytkownik贸w. U偶ytkownik powinien by膰 wykorzystywany w zasadzie tylko do cel贸w administracyjnych, co jest podyktowane wzgl臋- dami bezpiecze艅stwa. Dla ka偶dego u偶ytkownika, kt贸ry b臋dzie pracowa艂 w systemie, trzeba utworzy膰 konto i nada膰 mu has艂o dost臋pu. Nie musz膮 one by膰 takie same, jak identyfika- tor u偶ytkownika i has艂o wykorzystywane do zalogowania si臋 do systemu operacyjnego. Ta sama zasada odnosi si臋 do u偶ytkownika . Po偶膮dane jest stosowanie r贸偶nych ha- se艂 dost臋pu w razie logowania si臋 do systemu operacyjnego i serwera MySQL, szcze- g贸lnie w przypadku u偶ytkownika .
Nadawanie has艂a nowym u偶ytkownikom nie jest obowi膮zkowe, jednak ze wzgl臋d贸w bez- piecze艅stwa po偶膮dane jest, aby ka偶dy u偶ytkownik posiada艂 w艂asne has艂o dost臋pu.
W przypadku tworzenia internetowej bazy danych wskazane jest utworzenie co najmniej jednego u偶ytkownika, kt贸ry b臋dzie wykorzystywany tylko przez dan膮 aplikacj臋 bazo- danow膮.
Mo偶na by zada膰 pytanie o cel tej operacji. Odpowied藕 zwi膮zana jest z systemem przy- wilej贸w.
"! !
Jedn膮 z najwa偶niejszych cech MySQL jest obs艂uga wyrafinowanego systemu przywilej贸w.
Przywilej to inaczej posiadane przez okre艣lonego u偶ytkownika prawo do wykonania okre- 艣lonego polecenia na okre艣lonym obiekcie. Idea przywilej贸w jest zbli偶ona do koncepcji praw dost臋pu do plik贸w.
Rejestruj膮c nowego u偶ytkownika MySQL, nale偶y nada膰 mu odpowiednie przywileje w celu wyszczeg贸lnienia czynno艣ci, kt贸re b臋dzie on m贸g艂 wykona膰 w systemie.
Zasada najmniejszego przywileju jest stosowana w celu zwi臋kszenia bezpiecze艅stwa sys- temu komputerowego. Jest to podstawowa, ale bardzo wa偶na zasada, o kt贸rej niestety cz臋- sto si臋 zapomina. Brzmi ona nast臋puj膮co:
204 Cz臋艣膰 II Stosowanie MySQL
U偶ytkownik (lub proces) powinien posiada膰 minimalny zbi贸r przywilej贸w
potrzebnych do wykonania przypisanego mu zadania.
Zasad臋 t臋 nale偶y stosowa膰 wsz臋dzie, nie tylko w odniesieniu do MySQL. Na przyk艂ad do wys艂ania zapytania do bazy danych ze strony WWW u偶ytkownik nie b臋dzie potrzebowa艂 wszystkich przywilej贸w, kt贸re posiada u偶ytkownik . Nale偶y wi臋c utworzy膰 nowego u偶ytkownika i nada膰 mu tylko przywileje niezb臋dne do uzyskania dost臋pu do bazy danych.
Polecenia ,% i %-./ - s艂u偶膮 do nadawania i odbierania u偶ytkownikom MySQL praw na czterech poziomach uprzywilejowania. Wyr贸偶niamy nast臋puj膮ce poziomy przywilej贸w:
globalny, baza danych, tabela, kolumna.
W dalszej cz臋艣ci rozdzia艂u wyja艣nimy, kt贸ry z nich i kiedy nale偶y stosowa膰.
Polecenie GRANT s艂u偶y do tworzenia nowych u偶ytkownik贸w i nadawania im przywile- j贸w. Sk艂adnia tego polecenia jest nast臋puj膮ca:
89:;. < =
1;
.1 <>? ;.>@> ? A( / /=
< >.B 89:;. 1C.>1;=
Klauzule w nawiasach kwadratowych s膮 opcjonalne. Poni偶ej zostan膮 om贸wione poszcze- g贸lne parametry tego polecenia.
Pierwszy z nich, , ma posta膰 listy przywilej贸w oddzielonych przecinkami. My- SQL posiada liczny zbi贸r przywilej贸w, opisanych w nast臋pnym podrozdziale.
Parametr jest opcjonalny. U偶ywa si臋 go w celu wskazania kolumn, do kt贸rych podane przywileje zostan膮 zastosowane. Mo偶na poda膰 nazw臋 pojedynczej kolumny lub list臋 nazw kolumn oddzielonych przecinkami.
Parametr wskazuje baz臋 lub tabel臋, do kt贸rej zostan膮 zastosowane podane przy- wileje. W celu nadania przywilej贸w na wszystkie bazy danych w systemie powi- nien przyj膮膰 warto艣膰 010. W贸wczas przywileje zosta艂y nadane na poziomie globalnym. Ten sam efekt mo偶na osi膮gn膮膰, przypisuj膮c parametrowi warto艣膰 0, je艣li nie jest u偶ywana 偶adna baza danych.
Cz臋艣ciej jednak wskazuje si臋 wszystkie tabele w bazie, wpisuj膮c 10, konkretn膮 tabel臋 ( ) lub pojedyncze kolumny w danej tabeli poprzez wpi- sanie i nadanie odpowiedniej warto艣ci parametrowi . Za pomoc膮 tych metod nadaje si臋 przywileje na pozosta艂ych trzech poziomach uprzywi- lejowania, odpowiednio: baza danych, tabela i kolumna. Je偶eli w trakcie wykonywania tego polecenia u偶ywana jest konkretna baza danych, to podanie samej nazwy tabeli b臋dzie zinterpretowane jako nadanie przywilej贸w tabeli o tej nazwie, znajduj膮cej si臋 w u偶ywanej bazie danych.
Rozdzia艂 8. Tworzenie internetowej bazy danych 205
Parametr powinien wskazywa膰 identyfikator, za pomoc膮 kt贸-
rego u偶ytkownik loguje si臋 do serwera MySQL. Oczywi艣cie nie musi by膰 to ten sam, kt贸-
ry jest u偶ywany przy logowaniu si臋 do systemu operacyjnego. Warto艣膰 tego parametru mo偶e r贸wnie偶 zawiera膰 nazw臋 komputera. Mo偶liwo艣膰 t臋 wykorzystuje si臋 na przyk艂ad do odr贸偶nienia u偶ytkownika (traktowanego jako 2 * ) od u偶ytkownika
23 1 . Jest to szczeg贸lnie u偶yteczne w przypadku, gdy u偶ytkownicy
z r贸偶nych domen maj膮 te same identyfikatory. Poza tym metoda ta zwi臋ksza poziom bez- piecze艅stwa systemu, gdy偶 pozwala okre艣li膰, z jakiej domeny konkretny u偶ytkownik mo-
偶e si臋 zalogowa膰, a nawet do jakich tabel lub baz ma on dost臋p z okre艣lonej lokalizacji.
Warto艣ci膮 parametru jest has艂o dost臋pu, kt贸rym powinien pos艂ugiwa膰 si臋 wskazany u偶ytkownik w trakcie logowania do serwera. Stosuje si臋 tutaj standardowe zasady dobo-
ru hase艂. Kwestie bezpiecze艅stwa zostan膮 om贸wione w dalszej cz臋艣ci ksi膮偶ki, jednak nale偶y zaznaczy膰, 偶e has艂o nie powinno by膰 艂atwe do odgadni臋cia. Niewskazane jest u偶y- wanie s艂贸w, kt贸re mo偶na znale藕膰 w s艂owniku ani nie powinno by膰 takie samo, jak identy- fikator u偶ytkownika. Najlepszym rozwi膮zaniem jest nadanie has艂a sk艂adaj膮cego si臋 z liter ma艂ych i wielkich oraz znak贸w nie b臋d膮cych literami.
Dodanie opcji 4 ,% /# / spowoduje, 偶e wskazany u偶ytkownik b臋dzie m贸g艂 nada- wa膰 innym u偶ytkownikom takie przywileje, jakie sam posiada.
Informacje dotycz膮ce nadanych przywilej贸w zapami臋tywane s膮 w czterech tabelach sys- temowych, znajduj膮cych si臋 w bazie danych o nazwie ! & . Tabele te nosz膮 nazwy: ! & 1
, ! & 1 ', ! & 1 ' $+ 5 oraz ! & 1 $+ 5; ka偶da z nich odpowiada jed- nemu z czterech poziom贸w uprzywilejowania opisanych wcze艣niej. Zamiast wykorzysty- wa膰 polecenie ,% mo偶na zmienia膰 dane bezpo艣rednio w wymienionych tabelach. Za- gadnienie to zostanie opisane w rozdziale 11.
MySQL wykorzystuje trzy typy przywilej贸w: przywileje nadawane zwyk艂ym u偶ytkownikom, przywileje dla administrator贸w,
przywileje specjalne.
Ka偶demu u偶ytkownikowi mo偶na przyporz膮dkowa膰 przywileje dowolnego typu, najroz- s膮dniejsze jednak jest nadawanie przywilej贸w dla administrator贸w tylko administratorom systemu, czyli zgodnie ze wspomnian膮 wcze艣niej zasad膮 najmniejszego przywileju.
U偶ytkownikom nale偶y nadawa膰 takie przywileje, kt贸re umo偶liwi膮 korzystanie tylko z po- trzebnych im baz i tabel. Nikomu, z wyj膮tkiem administratora, nie nale偶y udost臋pnia膰 sys- temowej bazy ! & , gdy偶 w niej w艂a艣nie przechowywane s膮 identyfikatory wszystkich u偶ytkownik贸w, ich has艂a dost臋pu itp. (szerzej zagadnienie to jest opisane w rozdziale 11.).
Przywileje przeznaczone dla zwyk艂ych u偶ytkownik贸w odwo艂uj膮 si臋 bezpo艣rednio do kon- kretnych rodzaj贸w polece艅 SQL i okre艣laj膮, czy dany u偶ytkownik mo偶e wykonywa膰 po- lecenia tego typu. Polecenia j臋zyka SQL zostan膮 szerzej om贸wione w nast臋pnym rozdziale, teraz ograniczymy si臋 tylko do kr贸tkiego opisu (tabela 8.1). Kolumna „Zastosowanie” wskazuje obiekty, kt贸rym mo偶e by膰 nadany okre艣lony typ przywilej贸w.
206 Cz臋艣膰 II Stosowanie MySQL
Przywileje dla u偶ytkownik贸w
Przywilej |
Zastosowanie |
Opis |
! # %. |
tabele, kolumny |
Pozwala na wyszukiwanie wierszy (rekord贸w) z tabel. |
>;! 9. |
tabele, kolumny |
Pozwala na wstawianie nowych wierszy do tabel. |
DC?:. |
tabele, kolumny |
Pozwala na zmian臋 warto艣ci wierszy zapisanych w tabeli. |
? # . |
tabele |
Pozwala na usuwanie z tabeli istniej膮cych wierszy. |
>;? E |
tabele |
Pozwala na tworzenie i usuwanie indeks贸w w poszczeg贸lnych tabelach. |
:#. 9 |
tabele |
Pozwala na dokonywanie zmian w strukturze istniej膮cych tabel, np. |
|
|
dodawanie nowych kolumn, zmian臋 nazw kolumn lub tabel, zmian臋 |
|
|
typu danych istniej膮cych kolumn. |
%9 :. |
bazy danych, tabele |
Pozwala na tworzenie nowych tabel i baz danych. Je偶eli w ramach |
|
|
polecenia 89:;. podano nazw臋 konkretnej tabeli lub kolumny, |
|
|
to u偶ytkownik ma prawo utworzy膰 tabel臋 lub kolumn臋 tylko o tej nazwie, |
|
|
a wi臋c najpierw b臋dzie zmuszony j膮 usun膮膰. |
?91C |
bazy danych, tabele |
Pozwala na usuwanie baz lub tabel. |
Wi臋kszo艣膰 przywilej贸w przeznaczonych dla zwyk艂ych u偶ytkownik贸w nie powoduje zmniej-
szenia bezpiecze艅stwa systemu. Przywilej 6 -% mo偶e by膰 wykorzystywany do obchodze- nia systemu przywilej贸w poprzez zmian臋 nazw tabel, jednak jest on potrzebny wi臋kszo艣ci u偶ytkownik贸w. Ochrona systemu jest zawsze rezultatem kompromisu mi臋dzy jego u偶y- teczno艣ci膮 a poziomem zabezpiecze艅. Administrator powinien samodzielnie podejmowa膰 decyzj臋 o nadaniu, lub nie, przywileju 6 -% zwyk艂ym u偶ytkownikom. Zazwyczaj jednak przywilej ten jest nadawany.
Opr贸cz przywilej贸w opisanych w tabeli 8.1 istnieje r贸wnie偶 przywilej %-7-%- "- (obecnie nie jest on praktycznie u偶ywany) oraz przywilej ,% , nadawany cz臋艣ciej poprzez dodanie opcji 4 ,% /# / ni偶 przez do艂膮czanie go do listy warto艣ci parametru .
W tabeli 8.2 opisano przywileje przeznaczone dla administrator贸w.
Przywileje dla administrator贸w
Przywilej Opis
9 #1:? Pozwala na powt贸rne za艂adowanie tabel zawieraj膮cych informacje na temat praw dost臋pu oraz
na od艣wie偶enie przywilej贸w, listy nazw 艂膮cz膮cych si臋 komputer贸w, dziennika zdarze艅 i tabel.
!BD.?1 ; Umo偶liwia zako艅czenie pracy serwera MySQL.
C91% !! Pozwala na 艣ledzenie proces贸w wykonywanych przez serwer i ich przerywanie.
@># Pozwala na wczytywanie danych z plik贸w do tabel i odwrotnie.
Istnieje mo偶liwo艣膰 nadania opisanych przywilej贸w u偶ytkownikom nie maj膮cym statusu
administratora, jednak nale偶y tego dokonywa膰 z zachowaniem najwy偶szej ostro偶no艣ci.
Zwyk艂emu u偶ytkownikowi nie powinno si臋 zw艂aszcza nadawa膰 przywilej贸w %-6/ ,
48 / i #%/"- .
Rozdzia艂 8. Tworzenie internetowej bazy danych 207
Z przywilejem 7 6- sprawa wygl膮da nieco inaczej. Jest on bardzo przydatny dla u偶ytkow-
nik贸w, gdy偶 mo偶liwo艣膰 wstawiania danych bezpo艣rednio z plik贸w do tabel pozwala za- oszcz臋dzi膰 czas, konieczny na r臋czne wpisywanie kolejnych warto艣ci. Z drugiej strony jednak mo偶e zosta膰 wykorzystany do za艂adowania wszelkich plik贸w, kt贸re widzi serwer MySQL, np. pliku bazy nale偶膮cej do innego u偶ytkownika czy pliku zawieraj膮cego has艂a dost臋pu. Przywilej ten powinien wi臋c by膰 nadawany z rozwag膮 lub te偶 administrator po- winien sam dokonywa膰 艂adowania danych z pliku do wskazanej przez u偶ytkownika tabeli.
MySQL posiada r贸wnie偶 dwa specjalne przywileje, przedstawione w tabeli 8.3.
Przywileje specjalne
Przywilej Opis
:## Nadaje wszystkie przywileje opisane w tabelach 8.1 i 8.2. Jest on r贸wnowa偶ny przywilejowi
:## C9>F># 8 !.
D!:8 Nie nadaje 偶adnych przywilej贸w. Powoduje zarejestrowuanie u偶ytkownika i pozwala mu
na zalogowanie si臋, lecz jakiekolwiek inne czynno艣ci s膮 dla niego niedost臋pne. Odpowiednie przywileje nadawane s膮 zwykle p贸藕niej.
! "#$%"
Przeciwie艅stwem ,% jest polecenie %-./ -, u偶ywane w celu odebrania u偶ytkownikowi okre艣lonych przywilej贸w. Jego sk艂adnia jest bardzo podobna do sk艂adni polecenia ,% :
9 F12 < =
1;
@91
Je偶eli do polecenia ,% do艂膮czono opcj臋 4 ,% /# / , przywilej ten mo偶na cof- n膮膰 w nast臋puj膮cy spos贸b:
9 F12 89:;. 1C.>1;
1;
@91
! & ' "#$%"
Aby zarejestrowa膰 u偶ytkownika maj膮cego status administratora, nale偶y wpisa膰:
Polecenie to spowoduje nadanie wszystkich przywilej贸w na wszystkie bazy danych u偶yt- kownikowi o identyfikatorze 7 , pos艂uguj膮cemu si臋 has艂em „ '9:;”, oraz umo偶liwi nadanie dowolnego przywileju innym u偶ytkownikom.
Niekiedy konieczne okazuje si臋 wyeliminowanie tego u偶ytkownika. Mo偶na to zrobi膰 w na- st臋puj膮cy spos贸b:
208 Cz臋艣膰 II Stosowanie MySQL
Zarejestrujmy teraz u偶ytkownika, kt贸ry nie b臋dzie posiada艂 偶adnych przywilej贸w:
Po rozmowie z Zosi膮 wiadomo ju偶, w jaki spos贸b chce korzysta膰 z bazy, mo偶na wi臋c nada膰 jej odpowiednie przywileje:
!
Jak wida膰, nie ma ju偶 potrzeby podawania has艂a dost臋pu, jakim pos艂uguje si臋 Zosia.
Je偶eli administrator dojdzie do wniosku, 偶e Zosia wykona艂a ju偶 cz臋艣膰 swoich zada艅, mo偶e ograniczy膰 nadane jej przywileje:
Kiedy Zosia nie b臋dzie ju偶 potrzebowa艂a dost臋pu do bazy danych, mo偶na odebra膰 jej wszystkie pozosta艂e przywileje:
#
$% % &
Konieczne jest zarejestrowanie u偶ytkownika, kt贸ry 艂膮czy si臋 z baz膮 danych poprzez stron臋 WWW zawieraj膮c膮 skrypty PHP. R贸wnie偶 w tym przypadku nale偶y zastosowa膰 zasad臋 naj- mniejszego przywileju, trzeba wi臋c rozwa偶y膰, jakie operacje ma wykonywa膰 skrypt PHP.
W wi臋kszo艣ci przypadk贸w wystarcz膮 przywileje -6-" , -% , -6- - i 8# -. Na- daje si臋 je w nast臋puj膮cy spos贸b:
Oczywi艣cie has艂o powinno by膰 bardziej skomplikowane ni偶 podane w przyk艂adzie.
Rozdzia艂 8. Tworzenie internetowej bazy danych 209
U偶ytkownik korzystaj膮cy z us艂ug zewn臋trznej firmy internetowej otrzyma zapewne szer-
sze przywileje na prac臋 z przydzielon膮 mu baz膮 danych. Identyfikator u偶ytkownika i je- go has艂o dost臋pu b臋d膮 prawdopodobnie umo偶liwia艂y zar贸wno wydawanie polece艅 serwe- rowi MySQL (tworzenie tabel itp.), jak i 艂膮czenie si臋 z baz膮 z poziomu strony WWW (np. wyszukiwanie danych w tabeli). Rozwi膮zanie takie mog艂oby obni偶y膰 nieznacznie stopie艅 zabezpieczenia systemu, zalecane jest wi臋c zarejestrowanie nowego u偶ytkownika z nast臋-
puj膮cym zbiorem przywilej贸w:
!
Utw贸rz wi臋c drug膮 wersj臋 u偶ytkownika, gdy偶 b臋dziemy jej potrzebowa膰 w nast臋pnych sekcjach.
( )
Wylogowanie si臋 z serwera MySQL jest dokonywane za pomoc膮 polecenia & . Zale- cane jest ponowne zalogowanie si臋 jako u偶ytkownik internetowy (zarejestrowany w po- przednim punkcie) i sprawdzenie poprawno艣ci dzia艂ania bazy danych.
! '
Przed przyst膮pieniem do lektury tego podrozdzia艂u czytelnik powinien by膰 ju偶 zalogowa- ny do serwera MySQL na koncie zwyk艂ego u偶ytkownika, za艂o偶onym w poprzednim pod- rozdziale lub te偶 utworzonym przez administratora systemu.
Pierwsz膮 czynno艣ci膮, jak膮 nale偶y wykona膰, jest wskazanie bazy danych, kt贸ra zostanie wy- korzystana. S艂u偶y do tego nast臋puj膮ce polecenie:
gdzie jest nazw膮 bazy danych.
T臋 sam膮 operacj臋 mo偶na wykona膰, podaj膮c nazw臋 bazy danych w trakcie logowania si臋 do serwera:
0
W omawianym przyk艂adzie wykorzystywana b臋dzie baza danych :
Po wykonaniu tego polecenia MySQL powinien zwr贸ci膰 nast臋puj膮cy komunikat:
? 0
Je偶eli przed przyst膮pieniem do pracy nie zostanie wybrana 偶adna baza danych, serwer wy- 艣wietli komunikat o b艂臋dzie:
9919 )5G6 ; ? 0 !
210 Cz臋艣膰 II Stosowanie MySQL
'
Nast臋pnym etapem tworzenia bazy danych jest konstrukcja tabel. S艂u偶y do tego polecenie j臋zyka SQL "%- - 6-, kt贸rego sk艂adnia przedstawia si臋 nast臋puj膮co:
%9 :. .:A# 4 7
Parametr powinien okre艣la膰 nazw臋 tabeli, kt贸ra ma zosta膰 utworzona. Z kolei parametr powinien mie膰 posta膰 listy kolumn oddzielonych przecinkami, jakie b臋- dzie zawiera膰 nowa tabela.
Ka偶da z kolumn musi by膰 okre艣lona przez podanie jej nazwy i typu danych. Przypomnijmy schemat bazy danych ksi臋garni „Ksi膮偶korama”:
! "
# ! $
% $ %
Na listingu 8.1 przedstawione s膮 polecenia SQL, za pomoc膮 kt贸rych zostan膮 utworzone
powy偶sze tabele (przy za艂o偶eniu, 偶e istnieje ju偶 baza danych ). Kod ten znajduje si臋 r贸wnie偶 w folderze rozdzial_08 w pliku o nazwie ksiazkorama.sql (przyk艂ady s膮 do- st臋pne na p艂ycie CD do艂膮czonej do ksi膮偶ki).
ksiazkorama.sql — kod SQL tworzy tabele w bazie danych ksi臋garni „Ksi膮偶korama”
0
4 3
4+57 3
4G57 3
H 4,57
7&
0
4 3
3
463,73
7&
0
4 0 4)+7 3
4+573
46573
4G3,7
7&
0 H
4 3
0 4)+7 3
Rozdzia艂 8. Tworzenie internetowej bazy danych 211
3
4 3 0 7
7&
0 H
4 0 4)+7 3
H I
7&
Kod SQL zawarty w pliku ksiazkorama.sql zostanie wykonany po wpisaniu nast臋puj膮cego
polecenia (zak艂adamy przy tym, 偶e plik ksiazkorama.sql ma t臋 sam膮 lokalizacj臋, co aplika- cja ! & ):
" # # #$ # % "
(Pami臋taj, by parametr nazwa_komputera zast膮pi膰 nazw膮 swego komputera).
Mechanizm przekierowania do pliku zawieraj膮cego kod SQL jest bardzo por臋czny, gdy偶 pozwala na edycj臋 kodu za pomoc膮 dowolnego edytora tekstowego przed jego wykonaniem.
Pojedyncza tabela jest tworzona za pomoc膮 odr臋bnego polecenia "%- - 6-. Jak wi-
da膰, ka偶da z tabel zawiera kolumny wyszczeg贸lnione w schemacie bazy danych, utwo- rzonym w poprzednim rozdziale. Ponadto ka偶dej kolumnie nadano nazw臋 oraz przypi- sano typ danych, jakie b臋d膮 w niej przechowywane. Niekt贸re kolumny s膮 opisywane przez dodatkowe atrybuty, obja艣nione w nast臋pnym punkcie.
/ 866 oznacza, 偶e pole, przy kt贸rym ten atrybut stoi, musi w ka偶dym wierszu tabeli mie膰 nadan膮 jak膮艣 warto艣膰. Je偶eli przy opisie nowej kolumny atrybut zosta艂 pomini臋ty, w贸wczas jej pola mog膮 by膰 puste ( 866).
8 /$ "%- - jest specjalnym atrybutem nadawanym kolumnom przechowuj膮cym warto艣ci ca艂kowitoliczbowe. Je偶eli do tabeli zostanie wpisany nowy rekord, w kt贸rym warto艣膰 pola z atrybutem 8 /$ "%- - b臋dzie nieokre艣lona, w贸wczas serwer My- SQL automatycznie wstawi w to miejsce unikalny identyfikator — b臋dzie nim liczba ca艂kowita o warto艣ci r贸wnej dotychczasowej maksymalnej warto艣ci w tej kolumnie i po- wi臋kszonej o jeden. W ka偶dej tabeli mo偶e wyst臋powa膰 najwy偶ej jedna kolumna z tym
atrybutem. Kolumny z atrybutem 8 /$ "%- - musz膮 by膰 indeksowane.
Atrybut #% %< -< oznacza, 偶e wskazana kolumna jest kluczem podstawowym tabeli,
a warto艣ci w niej zapisywane musz膮 by膰 unikalne. MySQL automatycznie indeksuje ta- kie kolumny. Zauwa偶my, 偶e w pliku ksiazkorama.sql wszystkim kolumnom z atrybutem
8 /$ "%- - (np. w tabeli ) przypisano r贸wnie偶 atrybut #% %< -<, dzi臋ki czemu zosta艂 spe艂niony wym贸g indeksowania p贸l z atrybutem 8 /$ "%- - .
Atrybut #% %< -< mo偶e by膰 wyszczeg贸lniony zaraz za nazw膮 nowej kolumny wy- 艂膮cznie w przypadku, gdy tylko ta jedna kolumna jest kluczem podstawowym tabeli. In- ny spos贸b okre艣lenia klucza podstawowego zosta艂 zaprezentowany dla tabeli # ! $
212 Cz臋艣膰 II Stosowanie MySQL
. Wykorzystanie omawianej metody jest wymuszone tym, 偶e w sk艂ad klucza pod-
stawowego tabeli # ! $ wchodzi nie jedna, ale dwie kolumny jednocze艣nie.
Atrybut 8 , - wpisany za identyfikatorem typu ca艂kowitoliczbowego oznacza, 偶e ko- lumna mo偶e zawiera膰 tylko warto艣ci nieujemne.
Rozwa偶my przyk艂ad pierwszej utworzonej tabeli:
0
4 3
4+57 3
4G57 3
H 4,57
7&
Tworz膮c now膮 tabel臋, nale偶y ka偶dej jej kolumnie przypisywa膰 odpowiedni typ danych. Wed艂ug schematu tabela sk艂ada si臋 z czterech kolumn. Pierwsza z nich, ,
jest kluczem podstawowym o warto艣ciach typu ca艂kowitoliczbowego (typ ). Co wi臋-
cej, wszystkie pola ID ( , ) mog膮 mie膰 tylko warto艣ci nieujemne. Wykorzystano r贸wnie偶 cechy atrybutu 8 /$ "%- - , dzi臋ki kt贸remu MySQL sam dba
o spe艂nienie powy偶szych wymog贸w — mamy wi臋c jeden k艂opot z g艂owy.
Pozosta艂e kolumny b臋d膮 przechowywa膰 dane maj膮ce posta膰 艂a艅cuch贸w znak贸w — na- dano im wi臋c typ * o okre艣lonej dla ka偶dej kolumny d艂ugo艣ci 艂a艅cucha, zawartej w na- wiasach okr膮g艂ych. Na przyk艂ad w polu mo偶na zapisywa膰 艂a艅cuchy zawiera- j膮ce nie wi臋cej ni偶 30 znak贸w.
Nawet je艣li nazwisko klienta liczy mniej ni偶 30 liter warto艣膰 pola , zawsze b臋dzie zajmowa膰 tyle pami臋ci, ile trzeba do zapisania 30 znak贸w. MySQL automatycznie doda do nazwiska tyle znak贸w spacji, ile brakuje do wykorzystania ca艂ej przydzielonej polu pami臋ci. Alternatyw膮 dla typu * jest 5 * — warto艣ci p贸l tego typu zajmuj膮 zaw- sze o jeden bajt wi臋cej ni偶 trzeba do zapami臋tania podanego 艂a艅cucha. Stosowanie p贸l typu 5 * oszcz臋dza wi臋c pami臋膰, mo偶e jednak negatywnie wp艂ywa膰 na wydajno艣膰 ca- 艂ego systemu.
Dla prawdziwych klient贸w, ich nazwisk i adres贸w rozmiar odpowiednich p贸l mo偶e oka- za膰 si臋 niewystarczaj膮cy.
Wi臋kszo艣膰 kolumn zosta艂a zadeklarowana jako / 866, dzi臋ki czemu wydajno艣膰 pra-
cy systemu mo偶e nieznacznie si臋 polepszy膰. Zagadnienia dotycz膮ce optymalizacji pracy serwera MySQL zostan膮 poruszone w rozdziale 11.
W obr臋bie niekt贸rych polece艅 "%- - 6- zawarte s膮 elementy, kt贸re nie zosta艂y jesz- cze om贸wione. Rozwa偶my kolejny przyk艂ad:
0
4 3
3
463,73
Rozdzia艂 8. Tworzenie internetowej bazy danych 213
7&
Kolumna jest zadeklarowana jako liczba zmiennoprzecinkowa typu = . Dla wi臋kszo艣ci typ贸w liczbowych zmiennoprzecinkowych istnieje mo偶liwo艣膰 okre艣lenia mak- symalnej liczby cyfr, jakie b臋d膮 wy艣wietlane, oraz ilo艣ci miejsc znacz膮cych po przecinku.
W przyk艂adzie ksi臋garni internetowej warto艣膰 zam贸wie艅 jest okre艣lana w z艂ot贸wkach, zade- klarowano wi臋c, i偶 ma ona nie wi臋cej ni偶 sze艣膰 cyfr plus dwie cyfry znacz膮ce po przecinku.
Dane przechowywane w kolumnie maj膮 typ .
W rozwa偶anej tabeli wszystkie kolumny, opr贸cz kolumny , s膮 zadeklarowane jako
/ 866. Dlaczego? Ot贸偶 wpisuj膮c nowe zam贸wienie nale偶y najpierw zapisa膰 je w tabeli
, nast臋pnie doda膰 odpowiednie rekordy do tabeli # ! $ , po czym obliczy膰 warto艣膰 ca艂ego zam贸wienia. W momencie wpisywania nowego zam贸wienia jego warto艣膰 nie zawsze jest znana, dlatego warto艣ci pola mog膮 by膰 nieokre艣lone.
W podobny spos贸b jak jest tworzona tabela :
0
4 0 4)+7 3
4+573
46573
4G3,7
7&
W tym przypadku nie ma potrzeby tworzenia klucza podstawowego, poniewa偶 ka偶da pu- blikacja ma w艂asny, unikalny numer ISBN. Nie licz膮c kolumny , wszystkie pozosta艂e
kolumny tej tabeli mog膮 posiada膰 warto艣ci 866. Mo偶na bowiem wyobrazi膰 sobie sytu- acj臋, w kt贸rej znany jest tylko numer ISBN ksi膮偶ki, zanim jeszcze zostanie ujawniony jej tytu艂, autor i cena.
Na przyk艂adzie tabeli # ! $ zademonstrowano spos贸b deklarowania kluczy podstawowych sk艂adaj膮cych si臋 z wi臋cej ni偶 jednej kolumny:
0 H
4 3
0 4)+7 3
3
4 3 0 7
7&
Pole , w kt贸rym zapami臋tywana jest liczba zam贸wionych egzemplarzy jednej ksi膮偶- ki, jest typu < 8 , - , a wi臋c mo偶e przyjmowa膰 warto艣ci liczb ca艂kowitych z za- kresu od 0 do 255.
Jak ju偶 wspomnieli艣my, klucze podstawowe sk艂adaj膮ce si臋 z wi臋cej ni偶 jednej kolumny nale偶y deklarowa膰 za pomoc膮 klauzuli #% %< -<. Przyk艂ad jej u偶ycia zaprezentowa- no powy偶ej.
Ostatnie polecenie z pliku ksiazkorama.sql powoduje utworzenie tabeli % $ :
0 H
214 Cz臋艣膰 II Stosowanie MySQL
4 0 4)+7 3
H I
7&
U偶yto w nim nowego typu danych, kt贸ry nie zosta艂 jeszcze om贸wiony — to typ > . Jest on stosowany w przypadku d艂u偶szych tekst贸w, np. artyku艂贸w prasowych. Istnieje kil-
ka jego wariant贸w, kt贸re zostan膮 szczeg贸艂owo opisane w dalszej cz臋艣ci tego rozdzia艂u.
Dla jeszcze lepszego zrozumienia procesu tworzenia tabel podane zostan膮 zasady nada- wania nazw kolumnom oraz og贸lne informacje na temat identyfikator贸w. Najpierw jednak powr贸cimy na chwil臋 do utworzonej bazy danych.
) * +,$( -"+. /0"
Po zalogowaniu si臋 do serwera MySQL i wybraniu bazy mo偶na sprawdzi膰, jakie tabele wchodz膮 w jej sk艂ad, wpisuj膮c nast臋puj膮ce polecenie:
" &
Serwer wy艣wietli w贸wczas list臋 wszystkich tabel wybranej bazy danych:
J J K . 0 K J J K K K K K H K K H K K K J J
- 45$56 7
Polecenia 4/ mo偶na r贸wnie偶 u偶y膰 do wy艣wietlenia wszystkich baz danych udost臋pnia- nych przez serwer:
" &
Szczeg贸艂owe informacje na temat konkretnej tabeli s膮 dost臋pne po u偶yciu polecenia
- "% -:
" &
MySQL wy艣wietli wszystkie informacje, kt贸re nale偶a艂o poda膰 przy tworzeniu tabeli:
J J J J J J J
K @ K . K ; K 2 K ? K I K
J J J J J J J
K 0 K 4)+7 K K C9> K K K
K K 4+57 K ( ! K K ;D## K K
K K 4657 K ( ! K K ;D## K K
K K 4G3,7 K ( ! K K ;D## K K
J J J J J J J G 45$5- 7
Rozdzia艂 8. Tworzenie internetowej bazy danych 215
Oba polecenia s膮 szczeg贸lnie przydatne do przypomnienia sobie np. typu danych przecho-
wywanych w konkretnej kolumnie czy przeanalizowania struktury bazy utworzonej przez innego projektanta.
& (
MySQL rozr贸偶nia cztery typy identyfikator贸w: bazy danych, tabele, kolumny (wszystkie s膮 ju偶 czytelnikowi znane) oraz aliasy (zostan膮 one szerzej om贸wione w nast臋pnym rozdziale).
Bazy danych w MySQL odwzorowuj膮 nazwy katalog贸w w strukturze plik贸w systemu ope- racyjnego, natomiast tabele odpowiadaj膮 pojedynczym plikom. Fakt ten ma bezpo艣redni
wp艂yw na zasady nazewnictwa oraz warunkuje rozr贸偶nianie (lub nie) wielkich i ma艂ych liter w nazwach baz i tabel. Je偶eli system operacyjny rozr贸偶nia wielkie i ma艂e litery, w贸w- czas czyni to r贸wnie偶 serwer baz danych (tak jest w przypadku systemu Unix), w przeciw-
nym razie wielko艣膰 liter nie b臋dzie mia艂a znaczenia (np. w przypadku Windows). W na-
zwach kolumn i alias贸w wielko艣膰 liter nie odgrywa roli, jednak w obr臋bie jednego polecenia nazwy te musz膮 by膰 zapisywane w taki sam spos贸b.
Warto wspomnie膰, 偶e lokalizacja katalog贸w i plik贸w z danymi jest ustawiana w plikach konfiguracyjnych serwera MySQL. Mo偶na j膮 odnale藕膰, wpisuj膮c w wierszu polece艅 sys- temu operacyjnego nast臋puj膮c膮 komend臋:
* 0
Szukamy zmiennej .
Podsumowanie rozwa偶a艅 na temat identyfikator贸w znajduje si臋 w tabeli 8.4. Jedynym wyj膮tkiem, o kt贸rym nale偶y wspomnie膰, jest fakt, 偶e identyfikatory MySQL nie mog膮 za- wiera膰 znak贸w o kodzie ASCII r贸wnym 0 i 255 (zreszt膮 i tak nie wiadomo, w jakim celu mia艂yby zosta膰 u偶yte).
Identyfikatory MySQL
Typ
identyfikatora
D艂ugo艣膰
maksymalna
Rozr贸偶nianie wielko艣ci liter Znaki dozwolone
Baza danych 64 Tak jak system operacyjny Wszystkie dozwolone przez system operacyjny
w nazwie katalog贸w, z wyj膮tkiem znaku L
Tabela 64 Tak jak system operacyjny Wszystkie dozwolone przez system operacyjne
w nazwie plik贸w, z wyj膮tkiem znak贸w L i $
Kolumna 64 Nie Wszystkie
Alias 255 Nie Wszystkie
Podane zasady ulegaj膮 jednak cz臋stym zmianom.
Pocz膮wszy od wersji 3.23.6 serwera MySQL identyfikatory mog膮 zawiera膰 s艂owa zarezer- wowane i wszelkiego rodzaju znaki specjalne. Jedynym wymogiem jest w贸wczas koniecz- no艣膰 zamkni臋cia ich w odwrotnych apostrofach (uzyskiwanych przez wci艣ni臋cie klawi- sza tyldy w g贸rnym lewym rogu wi臋kszo艣ci klawiatur). Mo偶na na przyk艂ad napisa膰:
0 M 0 M&
216 Cz臋艣膰 II Stosowanie MySQL
Wcze艣niejsze wersje systemu MySQL s膮 pod tym wzgl臋dem bardziej restrykcyjne i nie
dozwalaj膮 wykona膰 tak sformu艂owanego polecenia.
Oczywi艣cie z tak szerokich mo偶liwo艣ci nale偶y korzysta膰 z umiarem. To, 偶e baza mo偶e no- si膰 nazw臋 ? ' ?, wcale nie oznacza, 偶e powinna zosta膰 tak nazwana. Stosuje si臋 tu standardow膮 zasad臋 nazewnictwa, wed艂ug kt贸rej identyfikatory powinny mie膰 sen- sowne brzmienie.
! ' '
W MySQL wyr贸偶nia si臋 trzy podstawowe typy danych, kt贸re mog膮 by膰 przechowywane
w kolumnach: liczbowy, daty i czasu oraz 艂a艅cuchowy. Ka偶da z tych kategorii dzieli si臋
na szereg podtyp贸w. W tym podrozdziale scharakteryzujemy kr贸tko wszystkie dost臋pne typy danych, natomiast ich wady i zalety om贸wimy w rozdziale 11.
Wielko艣膰 pami臋ci potrzebnej do przechowania jednej danej 艣ci艣le zale偶y od jej typu. De-
klaruj膮c typ kolumny, nale偶y kierowa膰 si臋 nast臋puj膮c膮 zasad膮: zawsze wybiera si臋 taki typ danych, kt贸ry b臋dzie zajmowa艂 najmniej pami臋ci i jednocze艣nie pozwoli na zapisanie wszystkich potrzebnych informacji.
W przypadku niekt贸rych typ贸w danych mo偶liwe jest okre艣lenie maksymalnej szeroko艣ci wy艣wietlania. W poni偶szych tabelach wielko艣膰 t臋 zaznaczono liter膮 M. Je偶eli jest ona opcjo- nalna, litera M znajduje si臋 w nawiasach kwadratowych. Najwi臋ksza dopuszczalna war- to艣膰 parametru M wynosi 255.
Wszystkie parametry opcjonalne s膮 przedstawione w nawiasach kwadratowych.
Typy liczbowe dziel膮 si臋 na ca艂kowitoliczbowe i zmiennoprzecinkowe. W przypadku tych ostatnich istnieje mo偶liwo艣膰 zadeklarowania liczby cyfr znacz膮cych po przecinku — w ta- belach wielko艣膰 ta jest oznaczona symbolem D. Maksymalna warto艣膰 parametru D jest wyznaczona przez mniejsz膮 spo艣r贸d dw贸ch liczb: 30 i M - 2 (tj. maksymalna szeroko艣膰 wy- 艣wietlania minus 2 — jeden znak przecinka i jeden znak dla ca艂kowitej cz臋艣ci danej liczby).
W przypadku typ贸w ca艂kowitoliczbowych mo偶na je zaw臋zi膰 do typu 8 , - tak, jak pokazano na listingu 8.1.
Dla wszystkich typ贸w liczbowych mo偶na ustawi膰 atrybut -%/7 66. Powoduje on, 偶e przy wy艣wietlaniu zawarto艣ci kolumn posiadaj膮cych ten atrybut zapisane w nich liczby zostan膮 poprzedzone zerami. Je偶eli kolumna zostanie zdefiniowana jako -%/7 66, automatycz- nie b臋dzie ona r贸wnie偶 mie膰 typ 8 , - .
Typy ca艂kowitoliczbowe zosta艂y przedstawione w tabeli 8.5. W drugiej kolumnie tabeli zawarto dopuszczalny zakres danych w przypadku braku atrybutu 8 , - (pierwszy wiersz) i z ustawionym atrybutem 8 , - (drugi wiersz).
Rozdzia艂 8. Tworzenie internetowej bazy danych 217
Typy ca艂kowitoliczbowe
Typ Zakres Wykorzystanie
pami臋ci (w bajtach)
Opis
.>;(>;.<4 7= -127..128 lub 0..255 1 Bardzo ma艂e liczby ca艂kowite
A>. Synonim .>;(>;. A11# Synonim .>;(>;.
! :##>;.<4 7= -32768..32767 lub 0..65535 2 Ma艂e liczby ca艂kowite
?>D >;.<4 7= -8388608..8388607
lub 0..16777215
3 艢rednie liczby ca艂kowite
>;.<4 7= -231..231-1 lub 0..232-1 4 Zwyk艂e liczby ca艂kowite
>;. 8 9<4 7= Synonim typu >;. A>8>;.<4 7= -263..263-1 lub 0..264-1 8 Du偶e liczby ca艂kowite
Tabela 8.6 przedstawia typy zmiennoprzecinkowe.
Typy zmiennoprzecinkowe
Typ Zakres Wykorzystanie
pami臋ci (w bajtach)
Opis
@#1:.4 7 zale偶nie od precyzji r贸偶ny U偶ywany do deklarowania liczb zmiennoprzecinkowych o pojedynczej lub podw贸jnej precyzji.
@#1:.<4 3 7= 卤1.175494351E-38
卤3.402823466E+38
?1DA# <4 3 7= 卤1.7976931348623157E-308
卤2.2250738585072014E+308
4 Liczby zmiennoprzecinkowe
o pojedynczej precyzji. Typ ten jest r贸wnoznaczny z typem @#1:.4G7, pozwala przy tym na okre艣lenie szeroko艣ci wy艣wietlania i liczby cyfr znacz膮cych po przecinku.
8 Liczby zmiennoprzecinkowe
o podw贸jnej precyzji. Typ ten jest r贸wnoznaczny z typem @#1:.4N7, pozwala przy tym na okre艣lenie szeroko艣ci wy艣wietlania i liczby cyfr znacz膮cych po przecinku.
?1DA#
C9 %>!>1;<4 3 7=
jak wy偶ej Synonim typu ?1DA# <4 3 7=
9 :#<4 3 7= jak wy偶ej Synonim typu ?1DA# <4 3 7=
? %> :#<4 <3 =7= r贸偶ny M + 2 Liczba zmiennoprzecinkowa przechowywana jako zmienna typu
%B:9. Zakres zale偶y od warto艣ci M
— szeroko艣ci wy艣wietlania.
;D 9>%<4 3 |
7= |
jak wy偶ej |
Synonim typu ? %> :# |
? %<4 3 7= |
|
jak wy偶ej |
Synonim typu ? %> :# |
218 Cz臋艣膰 II Stosowanie MySQL
MySQL obs艂uguje szereg typ贸w daty i czasu — s膮 one zaprezentowane w tabeli 8.7. Ka偶-
dy z nich pozwala na wpisanie danych w formie liczbowej lub 艂a艅cucha znak贸w. Charak- terystyczn膮 cech膮 typu - # jest to, 偶e je偶eli pole tego typu pozostanie niewype艂nio- ne, w贸wczas automatycznie zostan膮 w nim zapisane czas i data aktualnie wykonywanej operacji. W艂a艣ciwo艣膰 ta jest szczeg贸lnie przydatna do analizy transakcji.
Typy daty i czasu
Typ Zakres Opis
?:. 1000-01-01do 9999-12-31 Data wy艣wietlana w formacie RRRR-MM-DD.
.> -838:59:59 do 838:59:59 Czas wy艣wietlany w formacie GG:MM:SS. Zakres typu jest tak szeroki, 偶e zapewne nigdy nie b臋dzie w pe艂ni wykorzystywany.
?:. .> 1000-01-01 00:00:00
do 9999-12-31 23:59:59
.> !.: C<4 7= 1970-01-01 00:00:00
do roku 2037
( :9<4 K 7= 70 - 69 (czyli 1970 - 2069)
lub 1901 - 2155
Data i czas wy艣wietlane w formacie RRRR-MM-DD GG:MM:SS.
Typ szczeg贸lnie przydatny do 艣ledzenia transakcji. Format wy艣wietlania zale偶y od warto艣ci parametru M, a g贸rny zakres typu od systemu operacyjnego.
Rok wy艣wietlany w formie dwu- lub czterocyfrowej. Jak wida膰, ka偶dy z nich ma odmienny zakres.
Tabela 8.8 prezentuje mo偶liwe dost臋pne formaty wy艣wietlania warto艣ci typu - #.
Formaty wy艣wietlania warto艣ci typu TIMESTAMP
Podany typ Format wy艣wietlania
.> !.: C RRRRMMDDGGMMSS
.> !.: C4)G7 RRRRMMDDGGMMSS
.> !.: C4),7 RRMMDDGGMMSS
.> !.: C4)57 RRMMDDGGMM
.> !.: C4N7 RRRRMMDD
.> !.: C467 RRMMDD
.> !.: C4G7 RRMM
.> !.: C4,7 RR
Typy 艂a艅cuchowe dziel膮 si臋 na trzy grupy. Pierwsza z nich to klasyczne (zwyk艂e) 艂a艅cuchy
znak贸w, czyli kr贸tkie fragmenty tekstu. Do tej grupy zaliczamy typy "4 % (艂a艅cuchy o sta艂ej d艂ugo艣ci) oraz . %"4 % (艂a艅cuchy o zmiennej d艂ugo艣ci). Dla ka偶dego z nich mo偶na okre艣li膰
d艂ugo艣膰 艂a艅cucha. 艁a艅cuchy zapisywane w kolumnach typu "4 % zostan膮 uzupe艂nione spacjami w celu pe艂nego wykorzystania dopuszczalnego limitu ich d艂ugo艣ci. Natomiast
Rozdzia艂 8. Tworzenie internetowej bazy danych 219
w kolumnach typu . %"4 % 艂a艅cuchy s膮 zapisywane w ich pierwotnej formie, dzi臋ki cze-
mu zajmuj膮 one tylko tyle pami臋ci, ile potrzeba (tak wi臋c w przypadku warto艣ci "4 % My- SQL usunie ko艅cowe znaki spacji przy ich pobieraniu z bazy, natomiast ewentualne znaki spacji znajduj膮ce si臋 na ko艅cu 艂a艅cucha . %"4 % zostan膮 wyeliminowane w momen- cie zapisania go do bazy). Wyb贸r kt贸rego艣 z tych typ贸w sprowadza si臋 wi臋c do rozstrzy- gni臋cia dylematu mi臋dzy zwi臋kszeniem szybko艣ci dzia艂ania kosztem u偶ywanej pami臋ci
a ograniczeniem zu偶ycia pami臋ci i spadkiem wydajno艣ci systemu. Zagadnienie to zostanie wyczerpuj膮co om贸wione w rozdziale 11.
Do drugiej grupy nale偶膮 typy -@ i 6/ . Warto艣ci obu wymagaj膮 zr贸偶nicowanych ilo艣ci pami臋ci. Typy te s膮 przeznaczone do przechowywania, odpowiednio, d艂u偶szych tekst贸w oraz danych binarnych. Warto艣ci typu 6/ to tzw. du偶e obiekty binarne (ang. binary large objects), st膮d te偶 wywodzi si臋 jego nazwa. Obiekty te mog膮 przechowywa膰 ka偶dy rodzaj danych, np. obrazy, d藕wi臋ki itp.
W praktyce jedyna r贸偶nica pomi臋dzy oboma typami polega na tym, 偶e w danych typu -@ rozr贸偶niana jest wielko艣膰 liter, typ 6/ natomiast tej w艂a艣ciwo艣ci nie posiada. Ponie- wa偶 oba typy pozwalaj膮 na zapisywanie du偶ych ilo艣ci danych, spos贸b ich wykorzysta- nia jest nieco bardziej skomplikowany. Zagadnienie to zostanie szerzej przedstawione
w rozdziale 11.
Trzecia grupa sk艂ada si臋 z dw贸ch typ贸w specjalnych - i - 8 . Typ - jest u偶ywany
w celu zaw臋偶enia warto艣ci danych, kt贸re mog膮 by膰 zapisane w danej kolumnie, do z g贸ry okre艣lonego zbioru warto艣ci, przy czym dane zapisane w kolumnie mog膮 mie膰 wi臋cej ni偶 jedn膮 warto艣膰 z tego zbioru. Podany zbi贸r warto艣ci mo偶e zawiera膰 co najwy偶ej 64 elementy.
- 8 to inaczej typ wyliczeniowy. Jest on bardzo podobny do typu - , z jedn膮 r贸偶nic膮:
kolumny typu - 8 mog膮 zawiera膰 tylko jedn膮 spo艣r贸d okre艣lonego zbioru warto艣ci lub warto艣膰 866, a zbi贸r warto艣ci dopuszczalnych mo偶e zawiera膰 do 65 535 element贸w.
Tabele 8.9, 8.10 i 8.11 zawieraj膮 podsumowanie w艂a艣ciwo艣ci typ贸w 艂a艅cuchowych. Tabela 8.9 przedstawia zwyk艂e typy 艂a艅cuchowe.
Zwyk艂e typy 艂a艅cuchowe
Typ Zakres Opis
<;:.>1;:#= %B:94 7 <A>;:9(= 1 - 255 znak贸w 艁a艅cuch znak贸w o sta艂ej d艂ugo艣ci M, gdzie M mo偶e przybiera膰 warto艣ci od 1 do 255. S艂owo kluczowe
;:.>1;:# wymusza u偶ycie domy艣lnego zbioru znak贸w. Zbi贸r ten jest i tak domy艣lnie wykorzystywany przezu MySQL, jednak opcja ta zosta艂a udost臋pniona jako cz臋艣膰 standardu ANSI SQL. S艂owo kluczowe A>;:9( wy艂膮cza rozpoznawanie wielko艣ci liter (domy艣lnie
|
|
wielko艣膰 liter jest rozpoznawana). |
%B:9 |
1 |
Synonim typu %B:94)7 |
<;:.>1;:#= F:9%B:94 7 <A>;:9(= |
1 - 255 znak贸w |
艁a艅cuch znak贸w o r贸偶nej d艂ugo艣ci, reszta jak wy偶ej. |
220 Cz臋艣膰 II Stosowanie MySQL
Tabela 8.10 prezentuje typy -@ i 6/ . Maksymalna liczba znak贸w w polu typu -@ jest
r贸wna maksymalnej wielko艣ci pliku, jaki mo偶na by przechowywa膰 w tym polu, mierzonej
w bajtach.
Typy TEXT i BLOB
Typ |
Maksymalna d艂ugo艣膰 (w znakach) |
Opis |
.>;(A#1A |
28 - 1 (czyli 255) |
Ma艂y obiekt A#1A |
.>;(. E. |
28 - 1 (czyli 255) |
Kr贸tkie pole tekstowe |
A#1A |
216 - 1 (czyli 65535) |
Zwyk艂y obiekt A#1A |
. E. |
21 - 1 (czyli 65535) |
Pole tekstowe o zwyk艂ej d艂ugo艣ci |
?>D A#1A |
224 - 1 (czyli 16777215) |
艢redni obiekt A#1A |
?>D . E. |
224 - 1 (czyli 16777215) |
Pole tekstowe o 艣redniej d艂ugo艣ci |
#1;8A#1A |
232 - 1 (czyli 4294967295) |
Du偶y obiekt A#1A |
#1;8. E. |
232 - 1 (czyli 4294967295) |
D艂ugie pole tekstowe |
Tabela 8.11 prezentuje typy - i - 8 .
Typy SET i ENUM
Typ Maksymalna ilo艣膰
warto艣ci w zbiorze
Opis
;D 4 3 3O7 65535 W kolumnie tego typu mo偶e znajdowa膰 si臋 tylko
jedna warto艣膰 ze zbioru warto艣ci dopuszczalnych lub ;D##.
! .4 3 3O7 64 W kolumnie tego typu mo偶e znajdowa膰 si臋 podzbi贸r
zbioru warto艣ci dopuszczalnych lub ;D##.
) ! '
Wi臋cej informacji na temat tworzenia bazy danych MySQL znajduje si臋 w podr臋czniku elektronicznym, dost臋pnym pod adresem http://www.mysql.com.
" !
Poniewa偶 znamy ju偶 metody rejestrowania u偶ytkownik贸w, zak艂adania baz danych i two- rzenia tabel, mo偶emy przej艣膰 do sposob贸w korzystania z bazy danych. W nast臋pnym roz- dziale zostan膮 przedstawione metody zapisywania danych do tabel, ich modyfikacji i usu- wania oraz wysy艂ania zapyta艅 do bazy.