rozdzia艂 tworzenie internetowej簔y趎ych z php i mysql tworzenie stron www vademecum profesjonalisty (helion) G66XKT24FNWBJWC6IVLWWBPXF767W2NNOG3DFXI


0x01 graphic


0x08 graphic
IDZ DO

PRZYKADOWY ROZDZIA

SPIS TRECI

KATALOG KSIEK

0x08 graphic
KATALOG ONLINE

ZAMW DRUKOWANY KATALOG

0x08 graphic
TWJ KOSZYK

DODAJ DO KOSZYKA

CENNIK I INFORMACJE

ZAMW INFORMACJE

0x08 graphic
O NOWOCIACH

ZAMW CENNIK

0x08 graphic
CZYTELNIA

FRAGMENTY KSIEK ONLINE

0x08 graphic
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 Tumaczenie: Daniel Kaczmarek, ukasz Zieli艅ski ISBN: 83-7361-140-1

Tytu oryginau: PHP and MySQL Web

Development, Second Edition

Format: B5, stron: 840

PHP i MySQL to wydajny tandem, pozwalajcy na realizacj wielu projektw

zwizanych z programowaniem aplikacji internetowych. Autorzy ksi膮偶ki PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty stworzyli wic unikatowy podrcznik, ktry czy w sobie opis funkcjonalnoci PHP i MySQL

z prezentacj鹿 wielu praktycznych rozwi鹿za帽, stworzonych za pomoc鹿 tych narzdzi.

To podejcie okazao si trafione, czego dowodem jest ogromna popularno扭忙

0x08 graphic
pierwszego wydania tej ksi鹿驴ki.

Oprcz sk鲁adni i biblioteki funkcji PHP, ksi鹿驴ka opisuje rwnie podstawowe pojcia

z dziedziny profesjonalnej inynierii oprogramowania zwizanego z sieci WWW.

Niektre, takie jak utrzymywanie, wsppraca i testowanie, s kwestiami istotnymi

dla inynierw oprogramowania. Inne pojcia, takie jak uwierzytelnianie, szyfrowanie

i kontrola sesji, maj szczeg贸lne znaczenie dla projektw programistycznych opartych

na Internecie.

Podstawowy kurs PHP

Tworzenie i obsuga baz danych za pomoc MySQL

Dynamiczne tworzenie kodu HTML, obrazkw i dokumentw

Tworzenie bezpiecznych usug za pomoc uwierzytelniania i SSL

Tworzenie koszyka na zakupy dla witryn handlu elektronicznego

Opis praktyk zwizanych z inynieri oprogramowania dla wikszych projektw WWW

Zastosowanie obiektowych technik programistycznych

Tworzenie spersonalizowanych dokumentw PDF

Korzystanie z usug WWW za pomoc XML i SOAP

PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty to ksi膮偶ka, ktra nie tylko przekazuje wiedz na temat PHP i MySQL, ale take prezentuje praktyczne sposoby jej wykorzystania. Jeli chcesz szybko nauczy si tworzenia profesjonalnych aplikacji WWW, ksi鹿驴ka ta bdzie trafionym zakupem.


0x08 graphic
0x01 graphic


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 cig贸w ................................................... ................................................ 42

Zmienne i cigi 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

Zasig zmiennych................................................... ................................................... . 47

Operatory ................................................... ................................................... ............ 48

Operatory arytmetyczne ................................................... ..................................... 49

Operatory ci膮g贸w ................................................... .............................................. 50

Operatory przypisania ................................................... ........................................ 50

Operatory por贸wna艅 ................................................... .......................................... 52

Operatory logiczne................................................... ............................................. 53


0x08 graphic
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


0x08 graphic
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 cig贸w................................................... ............................................ 117

Przycinanie cig贸w funkcje chop(), ltrim() i trim() ............................................ 117

Formatowanie cig贸w w celu ich prezentacji................................................... ...... 118

Formatowanie cig贸w do przechowania funkcje AddSlashes() i StripSlashes() .... 121

艁膮czenie i rozdzielanie cig贸w za pomoc膮 funkcji cig贸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 cigu za pomoc膮 funkcji strlen() .......................................... 126

Dopasowywanie i zamiana podcig贸w za pomoc膮 funkcji cig贸w................................. 126

Znajdowanie cig贸w w cigach funkcje strstr(), strchr(), strrchr() i stristr().......... 127

Odnajdywanie pozycji podcigu funkcje strpos() i strrpos() ............................... 128

Zamiana podcig贸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


0x08 graphic
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 podcig贸w za pomoc膮 wyra偶e艅 regularnych.......................................... 135

Zamiana podcig贸w za pomoc膮 wyra偶e艅 regularnych.................................................. 136

Rozdzielanie cig贸w za pomoc膮 wyra偶e艅 regularnych................................................. 136

Por贸wnanie funkcji cig贸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

Zasig ................................................... ................................................... ............... 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


0x08 graphic
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


0x08 graphic
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 oglnego 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 domylnych................................................... ........................ 273

U偶ywanie sta艂ych po艂膮cze艅 z baz膮................................................... ..................... 273

Wi臋cej wskaz贸wek ................................................... .......................................... 273

R贸偶ne typy tabel ................................................... ................................................... 273


0x08 graphic
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 usug................................................... ............ 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


0x08 graphic
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

Zadziaa艂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


0x08 graphic
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 oglnej 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


0x08 graphic
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 cig贸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


0x08 graphic
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


0x08 graphic
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


0x08 graphic
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


0x08 graphic
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,

0x08 graphic
wprowadzenie do systemu przywilej贸w, tworzenie tabel bazy danych,

0x08 graphic
typy kolumn w MySQL.

R贸wnie偶 i w tym rozdziale pos艂u偶ymy si臋 znanym ju偶 przyk艂adem ksi臋garni internetowej

0x08 graphic
„Ksi膮偶korama”. Przypomnijmy schemat jej bazy danych:

0x08 graphic
! "

0x08 graphic
0x08 graphic
# ! $

0x08 graphic
% $ %

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 ! & $ $ ',


0x08 graphic
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:


0x08 graphic
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.


0x08 graphic
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膰:


0x08 graphic
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:


0x08 graphic
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.


0x08 graphic
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.


0x08 graphic
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.

0x08 graphic
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

0x08 graphic
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.

0x08 graphic
@># 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 #%/"- .


0x08 graphic
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.

0x08 graphic
MySQL posiada r贸wnie偶 dwa specjalne przywileje, przedstawione w tabeli 8.3.

Przywileje specjalne

0x08 graphic
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

0x08 graphic
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:


0x08 graphic
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.


0x08 graphic
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 !


0x08 graphic
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:

0x08 graphic
%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.

0x08 graphic
0x08 graphic
Ka偶da z kolumn musi by膰 okre艣lona przez podanie jej nazwy i typu danych. Przypomnijmy schemat bazy danych ksi臋garni „Ksi膮偶korama”:

0x08 graphic
! "

0x08 graphic
0x08 graphic
# ! $

0x08 graphic
% $ %

Na listingu 8.1 przedstawione s膮 polecenia SQL, za pomoc膮 kt贸rych zostan膮 utworzone

0x08 graphic
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


0x08 graphic
Rozdzia艂 8. Tworzenie internetowej bazy danych 211

3

4 3 0 7

7&

0 H

4 0 4)+7 3

H I

0x08 graphic
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 # ! $


0x08 graphic
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


0x08 graphic
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


0x08 graphic
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


0x08 graphic
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


0x08 graphic
Typ

0x08 graphic
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

0x08 graphic
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&


0x08 graphic
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).


0x08 graphic
0x08 graphic
Rozdzia艂 8. Tworzenie internetowej bazy danych 217

Typy ca艂kowitoliczbowe


0x08 graphic
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

0x08 graphic
0x08 graphic
>;. 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


0x08 graphic
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

0x08 graphic
%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 ? %> :#


0x08 graphic
218 Cz臋艣膰 II Stosowanie MySQL

MySQL obs艂uguje szereg typ贸w daty i czasu — s膮 one zaprezentowane w tabeli 8.7. Ka偶-

0x08 graphic
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

0x08 graphic
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

0x08 graphic
( :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.


0x08 graphic
Tabela 8.8 prezentuje mo偶liwe dost臋pne formaty wy艣wietlania warto艣ci typu - #.

Formaty wy艣wietlania warto艣ci typu TIMESTAMP

0x08 graphic
Podany typ Format wy艣wietlania

.> !.: C RRRRMMDDGGMMSS

.> !.: C4)G7 RRRRMMDDGGMMSS

.> !.: C4),7 RRMMDDGGMMSS

.> !.: C4)57 RRMMDDGGMM

.> !.: C4N7 RRRRMMDD

.> !.: C467 RRMMDD

.> !.: C4G7 RRMM

0x08 graphic
.> !.: 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


0x08 graphic
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.

0x08 graphic
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

0x08 graphic
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

0x08 graphic
;:.>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.


0x08 graphic
220 Cz臋艣膰 II Stosowanie MySQL

Tabela 8.10 prezentuje typy -@ i 6/ . Maksymalna liczba znak贸w w polu typu -@ jest

0x08 graphic
0x08 graphic
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

0x08 graphic
Tabela 8.11 prezentuje typy - i - 8 .

Typy SET i ENUM


0x08 graphic
Typ Maksymalna ilo艣膰

warto艣ci w zbiorze

Opis


;D 4 3 3O7 65535 W kolumnie tego typu mo偶e znajdowa膰 si臋 tylko

0x08 graphic
jedna warto艣膰 ze zbioru warto艣ci dopuszczalnych lub ;D##.

0x08 graphic
! .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.

0x01 graphic

0x01 graphic



Wyszukiwarka

Podobne podstrony:
php i mysql tworzenie stron www vademecum profesjonalisty [helion] CONZDUWNFQFYUVVHCKLSSSQE7VYZR7HO
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie czwarte phmsv4
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie 2
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie phmsv3
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie phmsv3
7e 24p+i+mysql +tworzenie+stron+www+vademecum+profesjonalisty+ 5bhelion 5d JYJZNAZTJGAJTCVIA5GE6WDA
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty
%5bpl+book%5d+fr+przechowywanie+i+wyszukiwanie+danych +z+ksi%b9%bfki+ php+i+mysql +tworzenie+stron+w
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty phms2v
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty

wi臋cej podobnych podstron