plik


ÿþIDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ PHP i MySQL. Tworzenie SPIS TRERCI SPIS TRERCI aplikacji WWW Autor: Marc Wandschneider KATALOG KSI¥¯EK KATALOG KSI¥¯EK T³umaczenie: Jaros³aw Dobrzañski, Rados³aw Meryk ISBN: 83-246-0323-9 KATALOG ONLINE KATALOG ONLINE Tytu³ orygina³u: Core Web Application Development with PHP and MySQL ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG Format: B5, stron: 856 TWÓJ KOSZYK TWÓJ KOSZYK Stwórz wydajne i bezpieczne aplikacje internetowe " Poznaj zasady programowania w PHP i korzystania z baz danych DODAJ DO KOSZYKA DODAJ DO KOSZYKA " Zaprojektuj interfejs u¿ytkownika dla aplikacji " Wykorzystaj dokumenty w formacie XML " Zabezpiecz aplikacjê przed nieautoryzowanym dostêpem CENNIK I INFORMACJE CENNIK I INFORMACJE Sieæ WWW ju¿ dawno przesta³a byæ jedynie zbiorem setek statycznych witryn. DziS w sieci mo¿na znalexæ dziesi¹tki aplikacji  sklepów, katalogów, systemów ZAMÓW INFORMACJE ZAMÓW INFORMACJE bankowych, blogów i wielu innych. Do tworzenia takich aplikacji wykorzystuje siê kilka O NOWORCIACH O NOWORCIACH technologii, z których najwiêksz¹ popularnoSci¹ cieszy siê jêzyk PHP w po³¹czeniu z baz¹ danych MySQL. Nieodp³atny dostêp, ³atwoSæ obs³ugi oraz potê¿ne mo¿liwoSci ZAMÓW CENNIK ZAMÓW CENNIK sprawi³y, ¿e ta platforma jest stosowana przez ogromne rzesze programistów aplikacji WWW na ca³ym Swiecie.  PHP i MySQL. Tworzenie aplikacji WWW to ksi¹¿ka, dziêki której poznasz mo¿liwoSci CZYTELNIA CZYTELNIA tej technologii i nauczysz siê z nich korzystaæ, pisz¹c aplikacje internetowe. Dowiesz FRAGMENTY KSI¥¯EK ONLINE siê, jak tworzyæ programy w jêzyku PHP, manipulowaæ danymi zgromadzonymi w bazie, FRAGMENTY KSI¥¯EK ONLINE projektowaæ rozbudowane aplikacje i wdra¿aæ je. Przeczytasz tu o zabezpieczaniu aplikacji, usuwaniu b³êdów, korzystaniu z plików XML i us³ug sieciowych oraz projektowaniu ergonomicznych interfejsów u¿ytkownika. Dziêki praktycznym przyk³adom szybko nauczysz siê stosowaæ PHP i MySQL w swoich projektach. " Programowanie w jêzyku PHP " Organizacja kodu " Zasady programowania obiektowego " Projektowanie i tworzenie baz danych " Stosowanie jêzyka SQL " Przygotowywanie projektu aplikacji " Budowanie interfejsu u¿ytkownika Wydawnictwo Helion " Usuwanie b³êdów z kodu ul. Chopina 6 " Metody uwierzytelniania u¿ytkowników 44-100 Gliwice " Wyra¿enia regularne tel. (32)230-98-63 " Us³ugi sieciowe i protokó³ SOAP e-mail: helion@helion.pl " Wdra¿anie aplikacji Rozpocznij przygodê z programowaniem w PHP Wprowadzenie ..........................................................................................................................................17 Dla kogo przeznaczona jest ta ksi|ka? ......................................................................... 17 O PHP ......................................................................................................................... 18 UkBad ksi|ki ............................................................................................................... 19 Zanim zaczniesz .......................................................................................................... 20 Podzikowania ............................................................................................................. 20 Cz[ I Podstawy PHP 21 RozdziaB 1. Wprowadzenie w tematyk PHP ........................................................................................... 23 Pierwsze programy w PHP ............................................................................................. 23 Wpisywanie kodu PHP .................................................................................................. 25 Oznaczanie sekcji kodu PHP .................................................................................... 26 Aczenie PHP i HTML .............................................................................................. 27 Instrukcje i komentarze ........................................................................................... 28 W jaki sposób mo|na zapamitywa dane? .................................................................... 29 Podstawowe typy danych w PHP .................................................................................... 30 Liczby .................................................................................................................... 30 Cigi znaków .......................................................................................................... 32 Warto[ci typu boolean ............................................................................................. 35 Przydatne funkcje ......................................................................................................... 36 nl2br ..................................................................................................................... 36 var_dump ............................................................................................................... 36 print_r .................................................................................................................... 37 var_export .............................................................................................................. 37 Podsumowanie ............................................................................................................ 38 RozdziaB 2. Jzyk PHP ............................................................................................................................... 39 Wicej informacji o wprowadzaniu cigów znaków ........................................................... 39 Wicej informacji o typach danych ................................................................................. 41 Tablice ................................................................................................................... 41 Obiekty .................................................................................................................. 42 Specjalne typy i warto[ci ......................................................................................... 43 4 PHP i MySQL. Tworzenie aplikacji WWW Konwersja typów .......................................................................................................... 44 Podstawy ............................................................................................................... 44 Specyficzne rodzaje konwersji typów ......................................................................... 45 Przydatne funkcje do konwersji typów ....................................................................... 49 Zmienne i staBe ............................................................................................................ 51 Definiowanie staBych ............................................................................................... 51 OdwoBania do zmiennych przez warto[ lub przez referencj ....................................... 51 Zasig zmiennych ................................................................................................... 53 Czas istnienia zmiennych ........................................................................................ 53 Zmienne predefiniowane ......................................................................................... 54 Wyra|enia i operatory ................................................................................................... 55 Operatory: Bczenie wyra|eD ..................................................................................... 55 Aczenie wyra|eD i priorytety operatorów .................................................................. 62 Struktury sterujce ....................................................................................................... 63 Instrukcje if ............................................................................................................ 63 Instrukcja switch ..................................................................................................... 64 Ptle while (do...while) ............................................................................................ 66 Ptle for ................................................................................................................. 67 Ptle foreach .......................................................................................................... 67 Przerwanie dziaBania ptli ........................................................................................ 67 Podsumowanie ............................................................................................................ 69 RozdziaB 3. Organizacja kodu i jego wielokrotne wykorzystywanie ..................................................... 71 Podstawowy mechanizm wielokrotnego wykorzystywania kodu: funkcje ............................. 71 Definiowanie i wywoBywanie funkcji ........................................................................... 72 Przekazywanie parametrów do funkcji ....................................................................... 74 Zwracanie warto[ci przez funkcje ............................................................................. 78 Zasig zmiennych wewntrz funkcji .......................................................................... 79 Zasig i dostpno[ funkcji ..................................................................................... 83 Funkcje jako zmienne .............................................................................................. 84 Sposób wielokrotnego wykorzystywania kodu dla [rednio zaawansowanych: zastosowanie plików wBczanych ................................................................................ 85 Organizacja kodu w plikach ...................................................................................... 86 Wybór nazw plików i folderów ................................................................................... 88 WBczanie plików bibliotecznych w skryptach ............................................................. 90 Zastosowanie mechanizmu wBczania do Badowania szablonów stron .......................... 95 Podsumowanie ............................................................................................................ 96 RozdziaB 4. Programowanie obiektowe .................................................................................................. 97 Nie tylko biblioteki ....................................................................................................... 97 Programowanie obiektowe .......................................................................................... 100 Podstawowa terminologia ...................................................................................... 100 Podstawowe informacje o programowaniu obiektowym w PHP ................................... 101 Inicjalizowanie i usuwanie obiektów ........................................................................ 105 Dostpno[ klasy: kto mo|e oglda informacje ..................................................... 107 Definiowanie statycznych danych wewntrz klas ...................................................... 109 Rozszerzanie obiektów ............................................................................................... 113 Rozszerzanie zdefiniowanych klas .......................................................................... 114 Wicej o widoczno[ci ............................................................................................ 114 Ponowna implementacja metod klasy bazowej ........................................................ 115 Definiowanie klas w taki sposób, aby dziaBaBy tak samo: polimorfizm ........................ 116 Spis tre[ci 5 Inne wBasno[ci ........................................................................................................... 123 Porównywanie obiektów ......................................................................................... 124 Klonowanie obiektów ............................................................................................ 124 Wy[wietlanie warto[ci obiektów w sposób przyjazny dla u|ytkownika ......................... 125 Przekazywanie wskazówek dotyczcych typów ......................................................... 126 Automatyczne Badowanie ....................................................................................... 127 Podsumowanie .......................................................................................................... 127 RozdziaB 5. Tablice ....................................................................................................................................129 Wicej informacji o tablicach ....................................................................................... 129 Tworzenie tablic i umieszczanie w nich danych ........................................................ 130 Dostp do elementów tablic .................................................................................. 132 Usuwanie elementów i caBych tablic ....................................................................... 134 Zliczanie elementów tablicy ................................................................................... 135 Przetwarzanie elementów tablic w ptli ........................................................................ 135 Ptle foreach ........................................................................................................ 135 Ptle standardowe ................................................................................................ 136 Wewntrzne liczniki ptli oraz metody each, next, prev, pos i reset ........................... 137 Metoda array_walk ................................................................................................ 139 Tablice wielowymiarowe .............................................................................................. 140 Operacje na tablicach ................................................................................................. 141 Sortowanie tablic .................................................................................................. 142 Inne operacje na tablicach ..................................................................................... 145 Podsumowanie .......................................................................................................... 147 RozdziaB 6. Cigi znaków i znaki alfabetów narodowych .....................................................................149 Cigi znaków w PHP ................................................................................................... 149 W jaki sposób PHP interpretuje cigi znaków? ......................................................... 150 Zestawy znaków i kodowanie Unicode .......................................................................... 150 Kod ASCII ............................................................................................................ 150 Zestawy znaków ISO 8859 .................................................................................... 151 Zestawy znaków jzyków dalekowschodnich ............................................................ 151 Unicode ............................................................................................................... 152 Zestawy znaków Unicode ....................................................................................... 153 Zestawy znaków w PHP ............................................................................................... 153 ObsBuga innych zestawów znaków .......................................................................... 153 KBopoty, kBopoty& ................................................................................................ 155 W jaki sposób postpowa ze znakami? ................................................................. 156 Konfiguracja PHP w celu wykorzystania kodowania Unicode ........................................... 157 Instalacja i konfiguracja rozszerzeD mbstring i mbrex ............................................... 157 Przeci|anie funkcji ............................................................................................... 157 Operacje na cigach znaków ....................................................................................... 158 Pobieranie informacji o cigach znaków .................................................................. 159 Porzdkowanie cigów znaków ............................................................................... 160 Wyszukiwanie i porównywanie ................................................................................ 162 Wydzielanie podcigów .......................................................................................... 165 Zmiana wielko[ci liter ........................................................................................... 166 Konwersje kodowania ........................................................................................... 167 Podsumowanie .......................................................................................................... 167 6 PHP i MySQL. Tworzenie aplikacji WWW RozdziaB 7. Interakcje z serwerem: formularze ..................................................................................169 PrzykBady formularzy ................................................................................................... 169 Przetwarzanie formularzy HTML ................................................................................... 172 Wprowadzanie formularzy na stronie ....................................................................... 172 W jaki sposób s przesyBane dane? ....................................................................... 174 Dostp do danych formularzy z poziomu skryptu ...................................................... 176 Formularze a zestawy znaków ................................................................................ 178 Praca z serwerem ...................................................................................................... 179 Zrodowisko serwera .............................................................................................. 180 Zmienne serwera .................................................................................................. 180 Zmienne [rodowiskowe ......................................................................................... 185 Przekierowania .......................................................................................................... 186 Podsumowanie .......................................................................................................... 188 Cz[ II Podstawowe wiadomo[ci o bazach danych 189 RozdziaB 8. Wprowadzenie do baz danych ..............................................................................................191 Terminologia .............................................................................................................. 191 Podstawy ............................................................................................................. 191 Relacyjne bazy danych .......................................................................................... 193 Powody, dla których warto korzysta z systemów zarzdzania bazami danych .................. 194 Czynniki przemawiajce przeciwko plikom tekstowym bdz arkuszom kalkulacyjnym ... 194 Serwery baz danych .............................................................................................. 195 Popularne serwery baz danych .................................................................................... 196 MySQL ................................................................................................................. 196 PostgreSQL .......................................................................................................... 197 Oracle .................................................................................................................. 197 Microsoft SQL Server ............................................................................................ 197 Inne ..................................................................................................................... 198 W jaki sposób dokona wyboru serwera bazy danych? ................................................. 198 Analiza danych ..................................................................................................... 198 Mo|liwo[ci ........................................................................................................... 199 Wydajno[ ........................................................................................................... 199 Dostpno[ z poziomu PHP ................................................................................... 199 Koszty ................................................................................................................. 199 Nasz wybór ................................................................................................................ 200 Wspólne interfejsy ..................................................................................................... 200 Podsumowanie .......................................................................................................... 201 RozdziaB 9. Projektowanie i tworzenie baz danych .............................................................................203 Co nale|y umie[ci w bazie danych? ............................................................................ 203 Organizacja danych .................................................................................................... 205 Klucze gBówne ...................................................................................................... 205 Wybór typów danych .............................................................................................. 206 Organizacja danych w tabele .................................................................................. 210 Indeksy uBatwiajce wyszukiwanie .......................................................................... 213 Wprowadzenie do jzyka SQL ...................................................................................... 213 Tworzenie baz danych ................................................................................................. 215 Komunikacja z serwerem bazy danych .................................................................... 215 Nawizywanie poBczenia i uwierzytelnianie ............................................................. 215 Tworzenie bazy danych .......................................................................................... 216 Spis tre[ci 7 Nadawanie uprawnieD u|ytkownikom ........................................................................... 217 Przygotowania do tworzenia u|ytkowników .............................................................. 218 Tworzenie u|ytkowników ........................................................................................ 219 Usuwanie u|ytkowników lub uprawnieD ................................................................... 220 Tworzenie tabel .......................................................................................................... 221 Typy danych w jzyku SQL ..................................................................................... 221 Cykl istnienia klienta bazy danych .......................................................................... 225 Tworzenie tabeli ................................................................................................... 225 Mechanizmy zapisu tabel ...................................................................................... 227 Tworzenie indeksów .............................................................................................. 228 Klucze obce i kaskadowe usuwanie rekordów ......................................................... 228 Usuwanie tabel i baz danych ....................................................................................... 230 Podsumowanie .......................................................................................................... 231 RozdziaB 10. Wykorzystanie baz danych: przechowywanie i pobieranie informacji ........................233 Zanim zaczniemy ....................................................................................................... 233 Wprowadzanie danych do tabel ................................................................................... 234 Instrukcja INSERT INTO ......................................................................................... 234 Wprowadzanie danych w trybie masowym ............................................................... 235 Wprowadzanie danych innych typów ni| tekstowe .................................................... 237 Pobieranie danych z tabel ........................................................................................... 238 Podstawowa skBadnia ............................................................................................ 239 Aczenie danych z tabel przy pobieraniu ................................................................. 241 Sortowanie pobieranych danych ............................................................................. 244 Pobieranie po kilka wierszy naraz ........................................................................... 245 Modyfikowanie danych w tabelach ............................................................................... 246 Usuwanie danych z tabel ............................................................................................ 247 Podsumowanie .......................................................................................................... 248 RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych .....................................249 Transakcje ................................................................................................................ 249 Problem ............................................................................................................... 250 Rozwizanie ......................................................................................................... 251 Pisanie transakcji ................................................................................................. 252 Bardziej zBo|ony problem ....................................................................................... 253 Bardziej zaawansowane zapytania ............................................................................... 255 Aczenie wyra|eD .................................................................................................. 255 Okre[lanie zbiorów i zakresów warto[ci .................................................................. 256 Pobieranie niepowtarzalnych warto[ci ..................................................................... 257 Wykorzystanie funkcji SQL w zapytaniach ................................................................ 257 Grupowanie danych dla funkcji agregacji ................................................................. 262 Modyfikowanie schematu tabel ................................................................................... 263 Podsumowanie .......................................................................................................... 264 RozdziaB 12. PHP a dostp do danych .....................................................................................................265 Przygotowania ............................................................................................................ 265 Nawizywanie poBczenia i uwierzytelnianie .................................................................. 267 Kolejno[ zdarzeD ................................................................................................. 267 Nawizywanie poBczenia ...................................................................................... 268 Ustawianie zestawu znaków obowizujcego dla poBczenia ..................................... 270 8 PHP i MySQL. Tworzenie aplikacji WWW Wykonywanie zapytaD ................................................................................................. 270 Pobieranie danych ................................................................................................ 270 Sprawdzanie poprawno[ci danych wprowadzanych przez u|ytkownika ........................ 273 Wprowadzanie, usuwanie i aktualizowanie danych ................................................... 275 Transakcje ........................................................................................................... 276 ObsBuga bBdów rozszerzenia mysqli ....................................................................... 277 Wielokrotne wykorzystywanie zapytaD .......................................................................... 279 Wizanie parametrów ............................................................................................ 280 Wizanie wyników ................................................................................................. 281 Stara szkoBa: interfejsy proceduralne ........................................................................... 282 Podstawowe wiadomo[ci dotyczce proceduralnych interfejsów obsBugi baz danych ....... 283 TrwaBe poBczenia .....................................................................................................285 Podsumowanie ..............................................................................................................286 Cz[ III Planowanie aplikacji internetowych 287 RozdziaB 13. Aplikacje internetowe i internet ...........................................................................................289 Zwiatowa pajczyna  od kuchni ....................................................................................289 Internet jest prostszy, ni| przypuszczasz ....................................................................290 Komputery komunikujce si z innymi komputerami ..................................................290 ProtokóB HTTP ...........................................................................................................292 Typy MIME ................................................................................................................295 ProtokóB SSL ............................................................................................................295 Inne wa|ne protokoBy ................................................................................................299 Projektowanie aplikacji internetowych .............................................................................299 Terminologia ............................................................................................................300 Prosty ukBad .............................................................................................................300 Interfejs u|ytkownika ................................................................................................302 Implementacja reguB biznesu .....................................................................................303 Warstwa tylna  serwer ...........................................................................................306 Architektury n-warstwowe ..........................................................................................307 Wydajno[ i skalowalno[ .........................................................................................307 Podsumowanie ..............................................................................................................309 RozdziaB 14. Implementacja interfejsu u|ytkownika .................................................................................311 Elementy interfejsu u|ytkownika .....................................................................................311 Czym jest interfejs u|ytkownika? ...............................................................................312 Planowanie interfejsu u|ytkownika ............................................................................313 Udzielanie u|ytkownikom pomocy w rozwizywaniu problemów ...................................316 Wskazówki i strategie projektowania .........................................................................317 Implementacja interfejsu u|ytkownika .............................................................................319 Kaskadowe arkusze stylów (CSS) ..............................................................................319 WBczanie plików ......................................................................................................322 Biblioteki kodu do generowania interfejsu u|ytkownika ...............................................323 Implementacja sterowania interfejsem u|ytkownika ...................................................327 Podsumowanie ..............................................................................................................329 RozdziaB 15. Zarzdzanie u|ytkownikami ..................................................................................................331 W jaki sposób u|ytkownicy Bcz si z aplikacjami internetowymi? ...................................331 Go[cie a zarejestrowani u|ytkownicy ...............................................................................334 Uwierzytelnianie u|ytkowników ........................................................................................335 Spis tre[ci 9 Logowanie cz[ciowe i peBne ....................................................................................335 Gdzie mo|na zapisa informacje u|ytkowników? ........................................................336 Co mo|na zapisa, a czego zapisywa nie nale|y .......................................................337 Podsumowanie ..............................................................................................................339 RozdziaB 16. Zabezpieczenia aplikacji internetowych: planowanie i bezpieczeDstwo kodu ...............341 Strategie zabezpieczeD ...................................................................................................341 Co jest najwa|niejsze? ..............................................................................................342 Równowaga pomidzy bezpieczeDstwem a wygod u|ytkowania .................................343 Po zakoDczeniu fazy tworzenia aplikacji .....................................................................344 Podstawowe podej[cie ..............................................................................................344 Identyfikacja zagro|eD ....................................................................................................344 Zagro|enia ...............................................................................................................344 Czarne charaktery .....................................................................................................347 Zabezpieczenia kodu ......................................................................................................349 ZBota zasada ............................................................................................................349 Filtrowanie danych wej[ciowych .................................................................................349 Organizacja kodu ......................................................................................................355 Co mo|na umie[ci w kodzie? ...................................................................................356 Zagadnienia dotyczce systemu plików .....................................................................357 Stabilno[ kodu i bBdy .............................................................................................357 Operator wykonywania poleceD powBoki i instrukcja exec ............................................358 Podsumowanie ..............................................................................................................359 RozdziaB 17. Zabezpieczenia aplikacji internetowych: bezpieczeDstwo sprztu i oprogramowania ........................................................................................................ 361 Zabezpieczenia serwerów WWW i PHP ......................................................................... 361 U|ywaj aktualnego oprogramowania ....................................................................... 362 php.ini ................................................................................................................. 363 Konfiguracja serwera WWW ................................................................................... 364 Serwery wirtualne ................................................................................................. 365 Aplikacje internetowe umieszczone na serwerach komercyjnych ............................... 367 ProtokóB SSL ............................................................................................................. 368 Zastosowanie SSL w PHP ...................................................................................... 368 BezpieczeDstwo bazy danych ...................................................................................... 370 U|ytkownicy i system uprawnieD ............................................................................ 370 WysyBanie danych do serwera ................................................................................ 371 Nawizywanie poBczenia z serwerem ..................................................................... 371 Uruchamianie serwera .......................................................................................... 372 Zabezpieczenia sieci .................................................................................................. 372 Zapory firewall ...................................................................................................... 373 Strefy DMZ ........................................................................................................... 373 Wicej o sieciowych atakach DoS i DDoS ............................................................... 374 Zabezpieczenia komputera i systemu operacyjnego ...................................................... 374 Pamitaj o aktualizacjach systemu operacyjnego ..................................................... 374 Uruchamiaj tylko te programy, które s potrzebne ................................................... 375 Pamitaj o fizycznych zabezpieczeniach serwera ...................................................... 375 Plany awaryjne ........................................................................................................... 376 Podsumowanie .......................................................................................................... 377 10 PHP i MySQL. Tworzenie aplikacji WWW Cz[ IV Implementacja aplikacji internetowych 379 RozdziaB 18. ObsBuga bBdów i debugowanie ..........................................................................................381 W jaki sposób powstaj bBdy? ................................................................................... 381 BBdy PHP ............................................................................................................ 381 BBdy w kodzie ..................................................................................................... 383 BBdy zewntrzne .................................................................................................. 384 W jaki sposób PHP zarzdza bBdami? ......................................................................... 385 W jaki sposób PHP wy[wietla komunikaty o bBdach? .............................................. 385 Jakie bBdy generuje mechanizm obsBugi PHP? ........................................................ 386 ObsBuga bBdów .................................................................................................... 387 Konfiguracja systemu obsBugi bBdów w PHP ........................................................... 392 Wyjtki ...................................................................................................................... 392 Podstawowe wiadomo[ci o wyjtkach ..................................................................... 393 Wykorzystanie wyjtków ......................................................................................... 395 NieobsBu|one wyjtki ............................................................................................. 398 Rozszerzanie wyjtków .......................................................................................... 399 Debugowanie ............................................................................................................. 401 Wprowadzenie instrukcji diagnostycznych ................................................................ 401 Debugery kodu zródBowego .................................................................................... 403 Podsumowanie .......................................................................................................... 404 RozdziaB 19. Pliki cookie i sesje ..............................................................................................................405 Pliki cookie: niewielkie i przydatne ............................................................................... 405 Podstawowe operacje ........................................................................................... 405 Jak dziaBaj pliki cookie? ....................................................................................... 409 Zarzdzanie poprawno[ci plików cookie ................................................................ 410 Usuwanie plików cookie ........................................................................................ 411 Tablice plików cookie ............................................................................................ 411 Co mo|na umieszcza w plikach cookie? ................................................................ 412 Sposoby na  odchudzajcych si .......................................................................... 412 Sesje ........................................................................................................................ 413 Podstawowe zastosowanie .................................................................................... 414 Konfiguracja PHP w celu obsBugi sesji ..................................................................... 416 W jaki sposób jest przesyBany identyfikator sesji? .................................................... 417 Zapisywanie danych w sesji ................................................................................... 418 Buforowanie stron ................................................................................................ 421 Niszczenie sesji .................................................................................................... 423 W jaki sposób dziaBa pami sesji .......................................................................... 424 BezpieczeDstwo sesji ................................................................................................. 428 Uzyskanie identyfikatora sesji ................................................................................ 428 Ograniczanie mo|liwych zniszczeD spowodowanych przejciem identyfikatora sesji ........ 429 Podsumowanie .......................................................................................................... 431 RozdziaB 20. Uwierzytelnianie ................................................................................................................433 Planowanie logowania ................................................................................................ 433 Uwierzytelnianie realizowane przez serwer WWW .......................................................... 436 Proste uwierzytelnianie HTTP ................................................................................. 436 Schematy uwierzytelniania stosowane w systemie Windows ..................................... 441 Implementacja wBasnego mechanizmu uwierzytelniania ................................................. 442 Konfiguracja bazy danych pod ktem obsBugi logowania ........................................... 443 Dodawanie nowych u|ytkowników ........................................................................... 444 Spis tre[ci 11 Logowanie u|ytkowników ....................................................................................... 453 Aktualizacja stron, które wymagaj zalogowania si ................................................. 460 Wylogowywanie u|ytkowników ................................................................................ 463 Usuwanie u|ytkowników ........................................................................................ 465 Podsumowanie .......................................................................................................... 466 RozdziaB 21. Zaawansowane techniki wysyBania tre[ci do przegldarki oraz buforowanie wysyBanej tre[ci .................................................................................467 Globalizacja i parametry regionalne ............................................................................. 467 Parametry regionalne i ich wBa[ciwo[ci ................................................................... 468 Ustalanie lokalizacji u|ytkownika ............................................................................ 468 Ustawianie parametrów regionalnych dla bie|cej strony (Unix) ................................ 470 Ustawianie parametrów regionalnych dla bie|cej strony (Windows) .......................... 472 Poznawanie bie|cych parametrów lokalnych .......................................................... 474 WysyBanie sformatowanej tre[ci .................................................................................. 474 Formatowanie liczb ............................................................................................... 475 Waluty ................................................................................................................. 475 Inne funkcje formatujce ....................................................................................... 478 Buforowanie tre[ci ..................................................................................................... 481 Jak to dziaBa ......................................................................................................... 482 Korzystanie z buforowania tre[ci ............................................................................ 482 Pisanie wBasnego programu obsBugi ....................................................................... 484 Podsumowanie .......................................................................................................... 485 RozdziaB 22. Kontrola poprawno[ci danych za pomoc wyra|eD regularnych ................................487 U|ywanie wyra|eD regularnych ..................................................................................... 487 Czym s wyra|enia regularne? ............................................................................... 488 Instalacja ............................................................................................................. 489 Testowanie wyra|eD .............................................................................................. 489 Proste wyszukiwanie ............................................................................................. 490 Klasy znaków ....................................................................................................... 491 Granice ................................................................................................................ 493 Kropka ................................................................................................................. 494 Repetycja wzorców ................................................................................................ 494 Grupowanie i warianty ........................................................................................... 495 Sztuczki i puBapki .................................................................................................. 495 Kontrola poprawno[ci danych za pomoc wyra|eD regularnych ....................................... 496 Kontrola poprawno[ci nazwy u|ytkownika ............................................................... 496 Wzorce pasujce do numerów telefonów ................................................................. 497 Wzorce pasujce do kodów pocztowych .................................................................. 498 Wzorce pasujce do adresów e-mail ....................................................................... 499 Inne funkcje operujce na wyra|eniach regularnych .......................................................... 500 Funkcja ereg_replace ............................................................................................ 500 Funkcja split ......................................................................................................... 502 Podsumowanie .......................................................................................................... 503 RozdziaB 23. XML i XHTML .......................................................................................................................505 XML .......................................................................................................................... 505 Czym jest XML? .................................................................................................... 506 Kiedy korzysta z XML? ......................................................................................... 507 Podstawowa terminologia ...................................................................................... 508 12 PHP i MySQL. Tworzenie aplikacji WWW Struktura dokumentu XML ..................................................................................... 509 Przestrzenie nazw ................................................................................................. 513 Kontrola poprawno[ci XML .................................................................................... 515 Technologie pochodne .......................................................................................... 517 Praca z XML w PHP .................................................................................................... 518 Wybór pomidzy SAX i DOM ................................................................................... 519 Korzystanie z modelu DOM .................................................................................... 519 XHTML ...................................................................................................................... 530 Po co u|ywa XHTML? ........................................................................................... 530 Jak u|ywa XHTML? .............................................................................................. 531 Konwersja na XHTML ............................................................................................ 533 Podsumowanie .......................................................................................................... 533 RozdziaB 24. Pliki i katalogi .....................................................................................................................535 Dostp do plików ....................................................................................................... 535 Otwieranie plików ................................................................................................. 535 Zamykanie plików ................................................................................................. 538 Odczyt plików ....................................................................................................... 538 Zapis do plików .................................................................................................... 540 Prawa dostpu do plików i inne informacje .............................................................. 542 Usuwanie i zmiana nazw plików ............................................................................. 544 Dostp do katalogów .................................................................................................. 544 Operowanie [cie|kami dostpu .............................................................................. 545 Przegldanie zawarto[ci katalogów przy u|yciu klas ................................................. 546 Przegldanie zawarto[ci katalogów za pomoc funkcji ............................................. 546 Zmiana bie|cego katalogu ................................................................................... 547 Tworzenie i usuwanie katalogów ............................................................................ 547 Wzgldy bezpieczeDstwa ............................................................................................. 547 Kwestie zwizane z dostpem do plików ................................................................. 548 Podsumowanie .......................................................................................................... 550 RozdziaB 25. WysyBanie plików do serwera ..........................................................................................551 WysyBanie do serwera plików u|ytkownika .................................................................... 551 Na czym polega wysyBanie plików do serwera .......................................................... 551 Konfigurowanie PHP pod ktem wysyBania plików do serwera ................................... 552 Formularz klienta .................................................................................................. 553 Kod po stronie serwera ......................................................................................... 555 Ograniczanie rozmiaru wysyBanego pliku .................................................................. 557 WysyBanie wikszej liczby plików ............................................................................. 558 WysyBanie plików do serwera  przykBad ...................................................................... 560 Przygotowania ...................................................................................................... 560 Formularz nowego konta ........................................................................................ 561 Tworzenie nowego konta ....................................................................................... 561 Podgld danych u|ytkownika .................................................................................. 564 Pobieranie emblematu z bazy danych ..................................................................... 566 Wzgldy bezpieczeDstwa ............................................................................................. 567 Tylko zaufani u|ytkownicy ...................................................................................... 567 Ataki Denial of Service .......................................................................................... 568 Kontrola poprawno[ci plików ................................................................................. 568  ZBo[liwe nazwy plików ........................................................................................ 568 Podsumowanie .......................................................................................................... 569 Spis tre[ci 13 RozdziaB 26. Operowanie datami i czasem .............................................................................................571 yródBa dat i czasu ...................................................................................................... 571 PHP ..................................................................................................................... 571 System operacyjny ................................................................................................ 572 Serwer bazy danych .............................................................................................. 572 Strony WWW i u|ytkownicy ..................................................................................... 573 Daty i czas w PHP ...................................................................................................... 574 Datowniki w PHP ................................................................................................... 574 Pobieranie daty i czasu ......................................................................................... 575 Kontrola poprawno[ci daty i czasu ......................................................................... 579 Porównywanie dat i czasu ...................................................................................... 580 Wy[wietlanie sformatowanych dat i czasu ............................................................... 583 Problem z datownikami ......................................................................................... 587 Data i czas w serwerach baz danych ............................................................................ 587 Zakresy dat i czasu w popularnych serwerach baz danych ........................................ 587 Dodawanie i odejmowanie interwaBów czasowych .................................................... 588 Interpretacja dat w bazach danych ......................................................................... 588 MySQL i datowniki ................................................................................................ 589 Podsumowanie .......................................................................................................... 589 RozdziaB 27. UsBugi XML Web Services i SOAP ......................................................................................591 UsBugi XML Web Services ........................................................................................... 591 Tworzenie platformy .............................................................................................. 592 Wchodzimy do [wiata usBug XML Web Services ....................................................... 592 Szukanie usBug Web Services ................................................................................ 593 Jak dziaBaj usBugi Web Services ................................................................................. 594 SOAP ................................................................................................................... 594 WSDL .................................................................................................................. 595 HTTP ................................................................................................................... 601 XML-RPC .............................................................................................................. 602 Wykorzystywanie usBug Web Services w PHP ................................................................ 602 Wybieranie usBugi ................................................................................................. 602 Konfiguracja PHP .................................................................................................. 604 Korzystanie z usBugi .............................................................................................. 605 PrzykBad  korzystanie z API wyszukiwarki Google ........................................................ 609 Przygotowanie do korzystania z interfejsów API wyszukiwarki Google ......................... 609 Dalsze poznawanie usBugi ..................................................................................... 610 Jak dziaBa wyszukiwanie ........................................................................................ 611 Wyszukiwanie sBów kluczowych .............................................................................. 612 Podsumowanie .......................................................................................................... 616 RozdziaB 28. Korzystanie z PEAR .............................................................................................................617 Wprowadzenie do PEAR .............................................................................................. 617 Biblioteka kodu .................................................................................................... 618 Klasy podstawowe PEAR ....................................................................................... 618 SpoBeczno[ dajca wsparcie ................................................................................ 618 PECL ................................................................................................................... 619 Instalacja i konfiguracja .............................................................................................. 619 Unix ..................................................................................................................... 619 Windows .............................................................................................................. 620 14 PHP i MySQL. Tworzenie aplikacji WWW Podstawowe polecenia ............................................................................................... 621 Udostpnianie pomocy .......................................................................................... 622 Wy[wietlanie listy pakietów ................................................................................... 622 Pobieranie i instalowanie pakietów ......................................................................... 623 Pobieranie informacji ............................................................................................ 624 Aktualizacja istniejcych pakietów .......................................................................... 625 Odinstalowywanie pakietów ................................................................................... 625 Opcje konfiguracyjne PEAR .................................................................................... 626 PrzykBad  zastosowanie klasy Date ........................................................................... 626 Instalacja ............................................................................................................. 627 Podstawowy sposób u|ycia .................................................................................... 627 Dalsze przykBady ................................................................................................... 628 Podsumowanie .......................................................................................................... 629 RozdziaB 29. Tworzenie i wdra|anie aplikacji .......................................................................................631 Standardy pisania kodu .............................................................................................. 631 Troska o styl ........................................................................................................ 631 Opracowywanie dokumentu ze standardami pisania kodu ........................................ 633 Zwite wojny ........................................................................................................ 635 Inne kwestie do rozwa|enia ................................................................................... 636 Kontrola kodu zródBowego ........................................................................................... 637 Co nami kieruje? .................................................................................................. 637 Jak to dziaBa ......................................................................................................... 638 Wybieranie systemu kontroli kodu zródBowego ......................................................... 641 Praca z systemem kontroli kodu zródBowego ........................................................... 642 Testowanie ................................................................................................................ 644 Po co testowa? ................................................................................................... 644 Testowanie moduBów ............................................................................................ 645 Testowanie wydajno[ci i pracy przy obci|eniu ........................................................ 647 Kontrola bBdów ................................................................................................... 650 Wdra|anie ................................................................................................................. 651 Serwery testowe ................................................................................................... 651 Pisanie skryptów i automatyzacja procesu .............................................................. 652 Wdra|anie na serwery docelowe ............................................................................. 652 Podsumowanie .......................................................................................................... 653 Cz[ V PrzykBadowe projekty i dalsze pomysBy 655 RozdziaB 30. Strategie tworzenia udanych aplikacji internetowych ..................................................657 Obiekty typu singleton ................................................................................................ 657 Zarzdzanie sesjami ................................................................................................... 660 Konfiguracja ......................................................................................................... 660 BezpieczeDstwo .................................................................................................... 661 PoBczenie elementów w caBo[ ............................................................................. 662 Holistyczny sposób obsBugi bBdów .............................................................................. 664 BBdy u|ytkownika a bBdy aplikacji ........................................................................ 664 Zastpowanie domy[lnych programów obsBugi ........................................................ 667 Wy[wietlanie komunikatów o bBdach ..................................................................... 669 Tworzenie nowych klas wyjtków ............................................................................ 671 Spis tre[ci 15 Zarzdzanie poBczeniami z baz danych ...................................................................... 672 Lepsze rozwizanie ............................................................................................... 674 Najlepsze rozwizanie ........................................................................................... 675 Nowa, poprawiona funkcja unieszkodliwiajca znaki specjalne .................................. 676 Ustawienia konfiguracyjne PHP .................................................................................... 677 Ustawienia ogólne ................................................................................................ 677 Ustawienia zwizane ze znakami kodowanymi wielobajtowo ..................................... 678 Ustawienia zwizane z bBdami .............................................................................. 679 Ustawienia dotyczce bazy danych ......................................................................... 679 Podsumowanie .......................................................................................................... 679 RozdziaB 31. System zarzdzania terminami .........................................................................................681 Przegld .................................................................................................................... 681 Instalacja i uruchamianie przykBadu ............................................................................. 683 Struktura aplikacji i nawigowanie po stronach .............................................................. 683 Struktura strony .................................................................................................... 684 UkBad bazy danych ................................................................................................ 686 Strategia interfejsu u|ytkownika ............................................................................. 688 PeBna lista plików ................................................................................................. 689 Analiza kodu .............................................................................................................. 691 Klasa AppointmentManager ................................................................................... 691 ObsBuga dat i czasu .............................................................................................. 695 Przetwarzanie formularzy i nawigowanie midzy stronami ......................................... 698 Prezentowanie tygodnia i miesica ......................................................................... 703 wiczenia i sugestie ................................................................................................... 707 Zmiana widoku tygodniowego i dziennego ............................................................... 707 Tygodnie od poniedziaBku do niedzieli ..................................................................... 707 Usuwanie lub przenoszenie terminów ..................................................................... 708 Konwersja do klasy Date z PEAR ............................................................................ 708 Dopuszczenie nakBadajcych si terminów .............................................................. 708 Udostpnienie systemu wielu u|ytkownikom ........................................................... 708 Podsumowanie .......................................................................................................... 709 RozdziaB 32. Blog .......................................................................................................................................711 Przegld .................................................................................................................... 711 Instalacja i uruchamianie przykBadu ............................................................................. 713 Struktura aplikacji i nawigowanie midzy stronami ........................................................ 713 UkBad stron .......................................................................................................... 714 Struktura bazy danych i uwagi dotyczce bazy ......................................................... 716 Strategia budowy interfejsu u|ytkownika ................................................................. 718 PeBna lista plików ................................................................................................. 718 Analiza kodu .............................................................................................................. 720 Generowanie interfejsu u|ytkownika ....................................................................... 720 Zarzdzanie u|ytkownikami .................................................................................... 724 Zledzenie zalogowanych u|ytkowników ................................................................... 729 Zarzdzanie wpisami i komentarzami ..................................................................... 734 Sugestie i wiczenia ................................................................................................... 740 Ulepszenie listy u|ytkowników na stronie gBównej .................................................... 740 Dopuszczenie anonimowych komentarzy ................................................................. 741 Komentarze hierarchiczne ..................................................................................... 741 Zastosowanie mechanizmu transakcji przy tworzeniu kont u|ytkowników ...................... 741 Implementacja nowej funkcji strip_tags .................................................................. 742 Podsumowanie .......................................................................................................... 742 16 PHP i MySQL. Tworzenie aplikacji WWW RozdziaB 33. Sklep internetowy .............................................................................................................743 Przegld .................................................................................................................... 743 Instalacja i uruchamianie przykBadu ............................................................................. 744 Struktura aplikacji i nawigowanie midzy stronami ........................................................ 746 Podstawowa struktura aplikacji .............................................................................. 746 Struktura witryny ................................................................................................... 748 Struktura bazy danych ........................................................................................... 750 Strategia budowy interfejsu u|ytkownika ................................................................. 753 PeBna lista plików ................................................................................................. 754 Analiza kodu .............................................................................................................. 757 Przegldanie produktów ........................................................................................ 757 Implementacja koszyka z zakupami ........................................................................ 759 Przetwarzanie w ramach sekwencji kasowej ............................................................ 762 PrzesyBanie zamówieD ........................................................................................... 770 BezpieczeDstwo .................................................................................................... 776 Przetwarzanie pBatno[ci .............................................................................................. 776 Sugestie i wiczenia ................................................................................................... 777 Pominicie informacji o dostawie ........................................................................... 777 Przetwarzanie po zBo|eniu zamówienia .................................................................... 777 Strony administracyjne .......................................................................................... 777 Status zamówienia i anulowanie zamówienia .......................................................... 777 Podsumowanie .......................................................................................................... 778 Dodatki 779 Dodatek A Instalacja i konfiguracja ........................................................................................................781 Dodatek B Odpowiedniki funkcji obsBugi baz danych ............................................................................805 Dodatek C Zalecane materiaBy zródBowe ...............................................................................................813 Skorowidz ................................................................................................................................................815 W rozdziale 10.  Wykorzystanie baz danych: przechowywanie i pobieranie informacji omówiBem jzyk SQL w zakresie wykonywania podstawowych operacji na tabelach: wpro- wadzania danych, pobierania rekordów, ich aktualizowania i usuwania. W tym rozdziale wykorzystamy poznane podstawy i przejdziemy do bardziej zaawansowanych zagadnieD i konstrukcji jzyka SQL. W tym rozdziale: nauczymy si, gdzie, kiedy i jak korzysta z transakcji; dowiemy si, w jaki sposób wykonuje si zaawansowane zadania jzyka SQL, takie jak korzystanie z wyra|eD i funkcji; poznamy sposoby modyfikowania schematów tabeli w celu dodawania nowych kolumn lub zmiany nazw tabel. Podczas wykonywania operacji na danych zawsze trzeba dba o zachowanie spójno[ci i inte- gralno[ci danych. O ile system zarzdzania baz danych zapewnia bezpieczne wprowadzanie danych do tabel i pobieranie z nich informacji, nie mo|e zagwarantowa, |e dane zapisane w bazie zawsze bd miaBy sens. PrzykBadowo, je[li zaznaczyli[my w tabeli zawierajcej informacje o ksi|kach, |e sprzedali[my trzy ksi|ki klientowi, ale przed zapisaniem zamó- wienia w odpowiedniej tabeli nastpiBa awaria zasilania, baza danych bdzie zawieraBa nie- spójne informacje. Mo|e równie| wystpi problem rywalizacji, kiedy dwóch u|ytkowników jednocze[nie spróbuje kupi ostatni egzemplarz ksi|ki. W najgorszym przypadku mo|e si zdarzy, |e zamówienie zBo| obaj u|ytkownicy. 250 Cz[ II Podstawowe wiadomo[ci o bazach danych Wspomniane problemy mo|na rozwiza za pomoc odpowiedniego kodu, opracowujc mechanizmy  blokowania tabel w celu uniemo|liwienia korzystania z nich innym u|ytkow- nikom. Mo|na równie| utworzy mechanizmy wykrywajce niespójno[ci i niedokoDczone operacje. Jest to jednak sposób kosztowny, skomplikowany i podatny na bBdy. Lepsze efekty mo|na osign powierzajc te dziaBania serwerowi bazy danych za pomoc transakcji. Problem Przeanalizujmy dokBadniej przykBad ksigarni online. Wyobrazmy sobie, |e utworzono pry- mitywn tabel zawierajc dane o wszystkich produktach przeznaczonych na sprzeda| oraz tabel opisujc zamówienia. Dla uproszczenia zakBadamy, |e mo|na zakupi tylko jeden typ ksi|ek. W przykBadzie wykorzystamy zdefiniowane poni|ej tabele i pominiemy wiele szczegóBów zamówieD, takich jak informacje o wysyBce, cenie oraz pBatno[ciach. CREATE TABLE Products ( pid INTEGER AUTO_INCREMENT PRIMARY KEY, title VARCHAR(200) NOT NULL, isbn VARCHAR(200) NOT NULL, price NUMERIC(10,2) NOT NULL, number_in_stock INTEGER NOT NULL ) ENGINE = InnoDB; CREATE TABLE Orders ( order_id INTEGER AUTO_INCREMENT PRIMARY KEY, order_date DATETIME NOT NULL, user_id INTEGER NOT NULL, product INTEGER NOT NULL, num_units INTEGER NOT NULL, FOREIGN KEY(user_id) REFERENCES Users(user_id), FOREIGN KEY(product) REFERENCES Products(pid) ) ENGINE = InnoDB; W przypadku sprzeda|y ksi|ki klientowi powinni[my wykona dwa zapytania: UPDATE Products SET number_in_stock = 10 WHERE pid = 343; INSERT INTO Orders (order_date, user_id, product, num_units) VALUES (NOW(), 4358, 343, 1); Problem powstanie w przypadku, gdy pierwsze zapytanie wykona si pomy[lnie, ale drugie z jakichkolwiek przyczyn nie zostanie wykonane. Taka sytuacja mo|e si zdarzy z które- gokolwiek z nastpujcych powodów: utracono poBczenie z baz danych; nastpiBa awaria serwera bazy danych bdz brakBo miejsca na dysku twardym, co przyczyniBo si do niepowodzenia drugiego zapytania; z powodu awarii zasilania nastpiBo wyBczenie serwera. RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych 251 Wielu Czytelników zapewne wzrusza w tej chwili ramionami, mówic  taka sytuacja nie mo|e mi si przytrafi . Je[li jednak wezmiemy za przykBad du|e aplikacje internetowe, przetwarzajce tysice, je[li nie miliony transakcji dziennie, przekonamy si, |e takie sytu- acje zdarzaj si, a klienci oczekuj, |e powstaBe problemy zostan rozwizane w rozsdny i niekBopotliwy sposób. W powy|szym przykBadzie na szcz[cie klient nie zostaB obci|ony za co[, czego nie otrzyma, ale byBoby lepiej, gdyby aplikacja mogBa automatycznie wykrywa awarie i odtwarza brakujce pozycje w polu number_in_stock tabeli Products. Rozwizanie Majc na uwadze mo|liwe problemy, wprowadzimy pojcie transakcji. Jest to mechanizm pozwalajcy na grupowanie wielu zapytaD i instrukcji SQL w jedn niepodzieln operacj w bazie danych. Albo jest wykonywana i akceptowana (zatwierdzana) caBa grupa instrukcji, albo |adna z nich i wtedy skutki operacji s wycofywane. W rzeczywisto[ci taki mechanizm jest bardziej skomplikowany ni| si wydaje na pierwszy rzut oka. System zarzdzania relacyjn baz danych obsBugujcy transakcje musi speBnia tzw. reguBy ACID: Niepodzielno[ (ang. Atomicity)  transakcje rzdz si zasad wszystko albo nic. CaBa grupa dziaBaD w obrbie transakcji musi by traktowana jako niepodzielna jednostka. W przypadku niepowodzenia |adna z operacji nie mo|e si wykona. Spójno[ (ang. Consistency)  po wykonaniu transakcji baza danych musi znajdowa si w spójnym stanie, a wszystkie ograniczenia i reguBy integralno[ci danych musz zosta speBnione. Izolacja (ang. Isolation)  zmiany dokonywane przez transakcj w trakcie jej przeprowadzania nie mog by dostpne dla innych transakcji. Wewntrzne operacje ró|nych transakcji powinny by od siebie odseparowane. TrwaBo[ (ang. Durability)  serwer musi mie mo|liwo[ zakoDczenia transakcji w trybie nadzwyczajnym. Mo|e to oznacza, |e po pomy[lnie zakoDczonej transakcji pozostan zalegBe operacje lub  je[li transakcja zostanie przerwana lub anulowana  tylko cz[ operacji zostanie wykonana. W ka|dym przypadku serwer musi mie mo|liwo[ natychmiastowego zakoDczenia dziaBania i rekonstrukcji spójnego stanu przy ponownym uruchomieniu (niezale|nie od tego, czy mamy do czynienia z zatwierdzon transakcj, czy z transakcj anulowan). Wszystkie bazy danych omawiane w tej ksi|ce obsBuguj transakcje. W systemie MySQL trzeba jednak zwróci uwag na wykorzystywany typ tabeli. Je[li tabele zostaBy utworzone z wykorzystaniem mechanizmu zapisu MyISAM, transakcje nie bd obsBugiwane. W tej ksi|ce wszdzie tam, gdzie bdziemy wykorzystywa transakcje, zastosujemy mechanizm zapisu InnoDB. Niektóre serwery obsBuguj ró|ne poziomy izolacji transakcji. Wikszo[ obsBuguje czte- ry poziomy. Na najni|szym poziomie (który jednocze[nie jest najszybszy) transakcje maj mo|liwo[ odczytywania postpu i bie|cego stanu innych transakcji. Na najwy|szym po- ziomie transakcje s caBkowicie od siebie odseparowane (poziom najwolniejszy). Istnienie tych poziomów mo|na potraktowa jako przyznanie si do potrzeby kompromisu pomidzy poziomem izolacji transakcji a wydajno[ci aplikacji. Dla naszych potrzeb odpowiedni po- ziom izolacji zapewnia poziom domy[lny dla wikszo[ci serwerów baz danych omawianych D:\Roboczy Jarek\makiety poprawki i druku pdf\PHPiMySQL Tworzenie aplikacji WWW\09 druk\R11.doc (17-05-06) 251 252 Cz[ II Podstawowe wiadomo[ci o bazach danych w tej ksi|ce (powtarzalny odczyt  ang. repeatable read). Wspomn jeszcze, |e w systemie Oracle domy[lnie obowizuje nieco ni|szy poziom izolacji, ale to nie stanowi dla nas problemu. Czytelników zainteresowanych bardziej szczegóBowym zapoznaniem si z obsBug transakcji polecam signicie do ksi|ki, która w bardziej obszerny sposób opisuje ten temat. Pisanie transakcji Sposób oznaczania pocztku transakcji jest ró|ny dla ró|nych serwerów baz danych, jednak w przypadku wikszo[ci z nich transakcje rozpoczyna si prost instrukcj: BEGIN; W niektórych systemach baz danych jest dostpna opcja automatycznego zatwierdzania (ang. autocommit) zarzdzajca sposobem wykonywania zapytaD. Je[li ustawi si j na warto[ TRUE (lub 1, co jest warto[ci domy[ln), wszystkie wprowadzane zapytania bd automa- tycznie zatwierdzane w bazie danych. W przypadku ustawienia jej na FALSE (0), zapytania bd rejestrowane tak, jakby wchodziBy w skBad transakcji. W tym przypadku zatwierdzanie wykonuje si za pomoc jawnej instrukcji. Tak wic w systemie MySQL mo|na rozpocz transakcj za pomoc instrukcji: SET AUTOCOMMIT =0; Po zakoDczeniu wykonywania wszystkich zapytaD w transakcji, jej wyniki zatwierdza si w bazie danych za pomoc nastpujcej instrukcji: COMMIT; Aby anulowa transakcj i cofn wykonane w niej operacje, nale|y zastosowa nastpujc instrukcj: ROLLBACK; W przypadku zakoDczenia poBczenia z serwerem, jego awarii lub przerwania transakcji w inny sposób przed wykonaniem instrukcji COMMIT, automatycznie wykonuje si instrukcja ROLLBACK i transakcja jest anulowana. Wrómy do naszego problemu sprzeda|y ksi|ek. Je[li skorzystamy z transakcji, sekwencja instrukcji SQL przyjmie nastpujc posta: BEGIN; UPDATE Products SET number_in_stock = 10 WHERE pid = 343; INSERT INTO Orders (order_date, user_id, product, num_units) VALUES(NOW(), 4538, 343, 1); Je[li doszli[my do tego miejsca bez bBdów: COMMIT; W innym przypadku, je[li wystpiBy bBdy: ROLLBACK; RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych 253 Bardziej zBo|ony problem Trudno si do tego przyzna, ale w naszym systemie cigle jeszcze wystpuje pewien kBo- pot. Rozwizali[my problem spójno[ci bazy danych w przypadku awarii serwera podczas wykonywania programu sprzeda|y, ale mo|e si zdarzy inna sytuacja  kilku u|ytkowni- ków bdzie chciaBo zakupi jedn ksi|k w tym samym czasie. Spróbujmy przeanalizowa sytuacj, w której dwóch u|ytkowników spróbuje zakupi t sam ksi|k, podczas gdy w magazynie pozostaB tylko jeden egzemplarz. +-----+-------------+------+-------+-----------------+ | pid | title | isbn | price | number_in_stock | +-----+-------------+------+-------+-----------------+ | 343 | 'Szcz[cie' | 'xx' | 19.99 | 1 | +-----+-------------+------+-------+-----------------+ Kod obsBugi sprzeda|y jest nastpujcy: BEGIN SELECT number_in_stock FROM Products WHERE pid = 343; Odjcie 1 od warto[ci number_in_stock i ustawienie jej na now warto[ (tu oznaczymy j jako "nowa") UPDATE Products SET number_in_stock = nowa WHERE pid = 343; INSERT INTO Orders(order_date, user_id, product, num_units) VALUES (NOW(), 4538, 343, 1); Je[li doszli[my do tego miejsca bez bBdów: COMMIT; W innym przypadku, je[li wystpiBy bBdy: ROLLBACK; Nasz nowy problem wystpi w przypadku, gdy dwóch u|ytkowników naszej aplikacji pró- buje zakupi t sam ksi|k w tym samym czasie. Poni|ej zaprezentuj sekwencj operacji wykonywanych przez obu u|ytkowników w przybli|eniu w tym samym czasie. U|ytkownik 1. rozpoczyna proces zakupu. Wykonuj si nastpujce instrukcje: [U|ytkownik 1] BEGIN SELECT number_in_stock FROM Products WHERE pid = 343; Odjcie 1 od warto[ci number_in_stock i ustawienie jej na now warto[ (tu oznaczymy j jako "nowa") Program wykonywany przez pierwszego u|ytkownika stwierdza, |e w magazynie jest jeden egzemplarz ksi|ki i jest gotowy do obsBugi zakupu. Jednak w tym samym czasie robi zakupy drugi u|ytkownik i wykonuje nastpujcy kod: [U|ytkownik 2] BEGIN SELECT number_in_stock FROM Products WHERE pid = 343; Odjcie 1 od warto[ci number_in_stock i ustawienie jej na now warto[ (tu oznaczymy j jako "nowa") D:\Roboczy Jarek\makiety poprawki i druku pdf\PHPiMySQL Tworzenie aplikacji WWW\09 druk\R11.doc (17-05-06) 253 254 Cz[ II Podstawowe wiadomo[ci o bazach danych Zatem program wykonywany przez drugiego u|ytkownika równie| stwierdza, |e w maga- zynie pozostaB jeden egzemplarz i jest gotowy do obsBugi zakupu. Domy[lny poziom izolacji transakcji dla naszego serwera bazy danych nie jest najbardziej restrykcyjny, zatem równolegle wykonujce si transakcje mog odczyta warto[ci tego samego wiersza. Teraz jednak kod obsBugujcy pierwszego u|ytkownika wykona nastpujce instrukcje: [U|ytkownik 1.] UPDATE Products SET number_in_stock = nowa WHERE pid = 343; INSERT INTO Orders(order_date, user_id, product, num_units) VALUES (NOW(), 4538, 343, 1); COMMIT; U|ytkownik numer 1 pomy[lnie zakupiB ksi|k. Kiedy drugi u|ytkownik spróbuje j zakupi za pomoc nastpujcego kodu: [U|ytkownik 2.] UPDATE Products SET number_in_stock = nowa WHERE pid = 343; INSERT INTO Orders(order_date, user_id, product, num_units) VALUES (NOW(), 4538, 343, 1); COMMIT; wykonanie zapytania UPDATE powiedzie si, ale nie spowoduje aktualizacji wierszy w tabeli! Wynika to z faktu, i| program obsBugujcy transakcj serwera bazy danych stwierdzi, |e dane ulegBy zmianie i nie pozwoli drugiemu procesowi ich zmodyfikowa. To jednak nie powoduje zgBoszenia bBdu. W kodzie musimy teraz wprowadzi dodatkowe instrukcje, które wykryj, czy interesujcy nas wiersz zostaB zmodyfikowany i w takiej sytuacji anuluj transakcj lub ponowi prób aktualizacji, je[li modyfikacja nie nastpiBa. Istnieje jednak o wiele bardziej eleganckie rozwizanie, polegajce na zastosowaniu zmo- dyfikowanej instrukcji SELECT: SELECT... FOR UPDATE. W przypadku pobrania warto[ci wiersza za pomoc tego zapytania jednocze[nie wskazujemy, |e mamy zamiar zmodyfiko- wa w nim dane. W tej sytuacji inne transakcje lub u|ytkownicy próbujcy uzyska dostp do danych zostan zablokowani do czasu zakoDczenia transakcji. Teraz mo|emy przepisa nasz kod w nastpujcy sposób: BEGIN SELECT number_in_stock FROM Products WHERE pid = 343 FOR UPDATE; Odjcie 1 od warto[ci number_in_stock i ustawienie jej na now warto[ (tu oznaczymy j jako "nowa") UPDATE Products SET number_in_stock = nowa WHERE pid = 343; INSERT INTO Orders(order_date, user_id, product, num_units) VALUES (NOW(), 4538, 343, 1); Je[li doszli[my do tego miejsca bez bBdów: COMMIT; W innym przypadku, je[li wystpiBy bBdy: ROLLBACK; RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych 255 Dziki wprowadzeniu klauzuli FOR UPDATE wszystkie inne procesy próbujce uzyska dostp do tej samej warto[ci bd musiaBy czeka na wywoBanie instrukcji COMMIT lub ROLLBACK. To eliminuje problem rywalizacji o zakup ostatniej ksi|ki. Dla transakcji istniej bardziej zaawansowane mechanizmy blokowania, ale w tej ksi|ce nie bdziemy pisali na tyle skomplikowanych programów, aby mogBy by potrzebne. PrzykBady transakcji zaprezentuj w cz[ci V  PrzykBadowe projekty i dalsze pomysBy . Do tej pory omówiBem podstawowe zapytania SQL, jednak mo|liwo[ci jzyka s o wiele wiksze. W tym podrozdziale opisz niektóre bardziej zaawansowane wBasno[ci jzyka SQL. Aczenie wyra|eD SBowo kluczowe WHERE umo|liwia wprowadzenie warunków ograniczajcych zakres zwra- canych wierszy przez niektóre zapytania, w tym SELECT, UPDATE i DELETE. Wcze[niej u|y- wali[my prostych wyra|eD o postaci: NazwaKolumny operator warto[ Wyra|enia mo|na jednak Bczy ze sob i w ten sposób formuBowa bardziej zBo|one wa- runki. Do tego celu sBu| sBowa kluczowe AND i OR. Ich dziaBanie jest podobne do dziaBania operatorów AND i OR w innych jzykach programowania. Wynik operacji AND jest prawdziwy, je[li s speBnione warunki po obu stronach operatora, natomiast wynik operacji OR jest praw- dziwy, je[li jest speBniony którykolwiek warunek po dowolnej stronie operatora. Dziki zasto- sowaniu operatorów AND i OR mo|na dowolnie formuBowa zapytania. Na przykBad, aby znalez wszystkich u|ytkowników o imieniu Gra|yna, którzy urodzili si po roku 1980, mo|na wyko- rzysta nastpujce zapytanie: SELECT user_name, user_email FROM Users WHERE full_name LIKE 'Gra|yna%' AND birthdate >= '1980-01-01'; W podobny sposób mo|na znalez u|ytkowników o imieniu Bogdan lub BogusBaw: SELECT user_name, user_email FROM Users WHERE full_name LIKE 'Bogdan%' OR full_name LIKE 'BogusBaw%'; W poBczeniach wielu wyra|eD tego typu mo|na i nale|y stosowa nawiasy, które obja[niaj kolejno[ sprawdzania warunków: SELECT user_name, full_name, birthdate FROM Users WHERE (full_name LIKE 'Bogdan%' OR full_name LIKE 'BogusBaw%') AND birthdate >= '1980-01-01'; D:\Roboczy Jarek\makiety poprawki i druku pdf\PHPiMySQL Tworzenie aplikacji WWW\09 druk\R11.doc (17-05-06) 255 256 Cz[ II Podstawowe wiadomo[ci o bazach danych Okre[lanie zbiorów i zakresów warto[ci Do okre[lania zakresów warto[ci w wyra|eniach w jzyku SQL s dostpne dwa przydatne sBowa kluczowe: IN i BETWEEN. SBowo kluczowe IN umo|liwia okre[lenie zbioru warto[ci skalarnych (nie mo|na stosowa symboli wieloznacznych), do którego ma nale|e warto[ w kolumnie: SELECT * FROM Messages WHERE forum_id IN (1, 3, 7, 4); SBowo kluczowe BETWEEN umo|liwia zdefiniowanie zakresu warto[ci. Mo|na je wykorzysta zarówno dla liczb, jak i dla dat: SELECT * FROM Users WHERE birthdate BETWEEN '1970-01-01' AND '1970-12-31'; SELECT * FROM Messages WHERE message_id BETWEEN 1000 AND 5000; W przypadku cigów znaków jest nieco gorzej. Jak wspominaBem wcze[niej, do okre[lenia zakresu cigów znaków serwer bazy danych wykorzystuje zdefiniowany porzdek sorto- wania. Dziki zdefiniowaniu porzdku sortowania mo|na okre[li sposób porzdkowania nie tylko danych w jzyku angielskim, ale tak|e w innych jzykach. Tak wic nastpujce zapytanie: SELECT * FROM Users WHERE user_name BETWEEN 'a' AND 'm'; zwraca nazwy u|ytkowników pomidzy a a m. Przy wprowadzeniu tego zapytania mo|e wy[wietli si nastpujcy komunikat o bBdzie: ERROR 1270 (HY000): Illegal mix of collations (utf8_general_ci, IMPLICIT), (latin1_swedish_ci, COERCIBLE), (latin1_swedish_ci, COERCIBLE) for operation 'BETWEEN'; Najbardziej prawdopodobn przyczyn tego bBdu jest wykorzystanie w programie klienckim u|ywanym do poBczenia z serwerem innego zestawu znaków i porzdku sortowania ni| ustawiony na serwerze (patrz rozdziaB 9.  Projektowanie i tworzenie baz danych ). Zazwyczaj na serwerze ustawia si kodowanie Unicode (utf8). Aby wyeliminowa problem, nale|y ustawi w programie klienckim ten sam zestaw znaków i porzdek sortowania, jak w bazie danych. W przypadku klienta mysql bazy danych MySQL robi si to za pomoc nastpujcej instrukcji: mysml> set character_set_connection = character_set_database; Powy|sza instrukcja ustawia tak|e porzdek sortowania na domy[lny dla wybranego zestawu znaków. Porzdek sortowania mo|na równie| wprowadzi w osobnej instrukcji w nastpujcy sposób: mysml> set collation_connection = collation_database; Dodatkow komplikacj jest fakt, i| niektóre serwery baz danych interpretuj zakresy warto[ci zdefiniowane w klauzuli BETWEEN wBcznie z warto[ciami granicznymi, natomiast inne nie uwzgldniaj tych warto[ci. Przed skorzystaniem ze sBowa kluczowego BETWEEN nale|y upewni si, w jaki sposób s interpretowane granice zakresu (we wszystkich bazach danych oma- wianych w tej ksi|ce granice przedziaBów wchodz w skBad zakresu). RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych 257 Pobieranie niepowtarzalnych warto[ci Czasami zamiast wszystkich warto[ci w kolumnie (gdzie mog wystpowa duplikaty) inte- resuje nas tylko zbiór mo|liwo[ci. W przypadku naszej tabeli Messages wykonanie zapytania: SELECT forum_id FROM Messages; mo|e spowodowa wy[wietlenie wielu powtórzeD nazw forów, na których publikowano wicej ni| jedn wiadomo[. Je[li jednak interesuje nas lista forów, na których opublikowano co najmniej jedn wiadomo[, mo|emy w jzyku SQL zastosowa zapytanie SELECT DISTINCT: SELECT DISTINCT forum_id FROM Messages; Powy|sze zapytanie zwróci pojedyncze warto[ci pola forum_id i wyeliminuje wszystkie duplikaty. Wykorzystanie funkcji SQL w zapytaniach Oprócz warto[ci skalarnych i kolumn, w zapytaniach jzyka SQL mo|na wykorzysta sze- reg funkcji. Mog to by zarówno wbudowane funkcje serwera, jak i funkcje zdefiniowane przez u|ytkownika w systemach obsBugujcych tzw. procedury skBadowane (ang. stored procedures)  funkcje zdefiniowane przez u|ytkownika i przechowywane na serwerze w postaci skompilowanej. W jzyku SQL wystpuj dwie klasy funkcji: Funkcje agregacji  funkcje, które przetwarzaj zbiór warto[ci (na przykBad warto[ci danych w kolumnie tabeli) i zwracaj pojedyncz warto[ skalarn. PrzykBadem mog by funkcje obliczajce sum warto[ci w kolumnie lub ich [redni arytmetyczn. Funkcje skalarne  funkcje przetwarzajce pojedyncz warto[ skalarn (na przykBad warto[ okre[lonej kolumny w okre[lonym wierszu) i zwracajce pojedyncz warto[ skalarn. W przypadku podania jako parametru nazwy kolumny, funkcja zwraca kolumn, której warto[ci s jej wynikami dla warto[ci kolumny zródBowej. PrzykBadami mog by funkcje zamiany cigów znaków w polu na maBe litery, konwersji walut oraz funkcje formatujce dane przed wy[wietleniem. W wyra|eniach mo|na stosowa wyBcznie funkcje skalarne. Funkcje agregacji mo|na wy- korzysta do przetwarzania wyników zapytania przed ich zwróceniem do u|ytkownika. Najcz[ciej stosuje si je w odniesieniu do wyników instrukcji SELECT. Niestety, funkcje stanowi kolejny obszar, w którym poszczególne serwery baz danych bardzo si ró|ni pomidzy sob. Cho zestaw wBasno[ci funkcjonalnych jest podobny, nazwy funkcji i sposób ich u|ywania bardzo si ró|ni pomidzy poszczególnymi serwerami. W tym rozdziale postaram si opisa najpopularniejsze funkcje dla najpopularniejszych serwerów. W przypadku, gdy rozbie|no[ci bd zbyt wielkie, przedstawi wersj dla bazy danych MySQL (zwizBy opis odpowiedników dla innych serwerów baz danych mo|na znalez w dodatku B  Odpo- wiedniki funkcji obsBugi baz danych ). D:\Roboczy Jarek\makiety poprawki i druku pdf\PHPiMySQL Tworzenie aplikacji WWW\09 druk\R11.doc (17-05-06) 257 258 Cz[ II Podstawowe wiadomo[ci o bazach danych W przypadku wywoBywania funkcji w zapytaniach SQL, pomidzy nazw funkcji a otwie- rajcym znakiem nawiasu przed list argumentów nie mo|e by spacji. AVG(daily_precip) Dobrze AVG (daily_precip) yle Funkcje numeryczne Rozpoczn od opisania kilku funkcji numerycznych, poniewa| s one najbardziej zrozumiale i najBatwiejsze w u|yciu. Wszystkie opisane poni|ej funkcje to funkcje agregacji, które wyko- rzystamy do przetwarzania zbioru wierszy w zapytaniu w celu uzyskania pojedynczej warto[ci. COUNT Funkcj COUNT mo|na wykorzysta na dwa sposoby: COUNT(NazwaKolumny) lub COUNT(*). Pierwszy sposób wywoBania zlicza w zestawie wyników liczb warto[ci okre[lonej kolumny ró|nych od NULL. W drugiej wersji funkcja COUNT zlicza liczb wierszy w zestawie wyników. Na przykBad instrukcja: SELECT COUNT(*) FROM Users; zlicza u|ytkowników w tabeli Users. Aby policzy u|ytkowników w tabeli Users, których nazwiska s ró|ne od NULL (co przy naszym schemacie tabeli jest dozwolone), mo|na wyko- rzysta nastpujce zapytanie: mysml> SELECT COUNT(full_name) from Users; +------------------+ | count(full_name) | +------------------+ | 4 | +------------------+ 1 row in set (1.26 sec) SUM Aby w zestawie wyników uzyska sum warto[ci zawartych w okre[lonej kolumnie, mo|na skorzysta z funkcji SUM. Gdyby[my mieli tabel z informacjami o pogodzie w okre[lonym miejscu i chcieli obliczy caBkowit warto[ opadów w 2002 roku, mogliby[my wykona nastpujce zapytanie: SELECT SUM(daily_precip) FROM DailyWeatherReports WHERE date BETWEEN '2002-01-01' AND '2002-12-31'; MAX i MIN Aby obliczy maksymaln lub minimaln warto[ kolumny w zestawie wyników, mo|na skorzysta z funkcji MAX i MIN. Kontynuujc nasz przykBad bazy danych o pogodzie z poprzed- niego punktu, aby znalez dni w 2002 roku, w których wystpiBy najwiksze i najmniejsze opady, mo|emy skorzysta z nastpujcych zapytaD: RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych 259 SELECT MAX(daily_precip) FROM DailyWeatherReports WHERE date BETWEEN '2002-01-01' AND '2002-12-31'; SELECT MIN(daily_precip) FROM DailyWeatherReports WHERE date BETWEEN '2002-01-01' AND '2002-12-31'; Powy|sze dwa zapytania mo|na poBczy w jedno. Zestaw wyników takiego zapytania bdzie skBadaB si z dwóch kolumn: SELECT MAX(daily_precip), MIN(daily_precip) FROM DailyWeatherReports WHERE date BETWEEN '2002-01-01' AND '2002-12-31'; AVG Aby obliczy [redni arytmetyczn warto[ci w kolumnie, mo|na skorzysta z funkcji AVG. Wykorzystuje si j w nastpujcy sposób: SELECT AVG(daily_precip) FROM DailyWeatherReports WHERE date BETWEEN '2002-01-01' AND '2002-12-31'; Funkcje znakowe W jzyku SQL wystpuje wiele przydatnych funkcji przetwarzania cigów znaków. Wikszo[ z nich to funkcje skalarne, które mo|na wykorzysta w wielu przypadkach. Wydzielanie podcigów Aby wydzieli cz[ cigu znaków w jzyku SQL, mo|na skorzysta z funkcji SUBSTRING (w systemie Oracle  SUBSTR). Funkcja pobiera trzy argumenty: warto[ (nazw kolumny), z której ma by wydzielony podcig, indeks pierwszego znaku podcigu oraz liczb znaków do wydzielenia. Uwaga W odró|nieniu od jzyka PHP, gdzie indeksy maj warto[ci poczwszy od 0, indeksy w cigach znaków w jzyku SQL liczy si od 1. Oznacza to, |e pierwszy znak w cigu ma indeks 1. Aby pobra pierwszych 5 znaków z ka|dego wiersza tabeli zawierajcej nazwy wszystkich stanów w USA i prowincji w Kanadzie, mo|na wykona nastpujce zapytanie: SELECT SUBSTRING(name, 1, 5) FROM states_provinces; Aby znalez stany i prowincje, których nazwy zaczynaj si od sekwencji New, mo|na wy- kona nastpujce zapytanie: SELECT * FROM states_provinces WHERE SUBSTRING(name, 1, 3) = 'New'; D:\Roboczy Jarek\makiety poprawki i druku pdf\PHPiMySQL Tworzenie aplikacji WWW\09 druk\R11.doc (17-05-06) 259 260 Cz[ II Podstawowe wiadomo[ci o bazach danych Konwersja wielko[ci liter Aby przeksztaBci cigi znaków na maBe bdz wielkie litery, mo|na skorzysta z funkcji LOWER lub UPPER. SELECT LOWER(user_name) FROM Users; SELECT UPPER(last_name) FROM customers; Funkcji LOWER i UPPER rzadko u|ywa si w wyra|eniach formuBowanych w klauzuli WHERE, poniewa|  jak wspominaBem w poprzednim rozdziale  w przypadku wikszo[ci operacji sortowania i porównaD wielko[ liter nie ma znaczenia. Wyszukiwanie cigu znaków Czsto przydaje si funkcja, która wyszukuje pozycj okre[lonego cigu znaków w tek[cie (lub kolumnie). Chocia| we wszystkich serwerach baz danych, które bdziemy wykorzystywa, taka funkcja jest dostpna, nazwy i sposoby korzystania z niej mog by ró|ne. Zarówno w systemie MySQL, jak i Oracle jest dostpna funkcja INSTR: INSTR(szukaj_tu, znajdz_mnie) Na przykBad, poni|sze zapytanie mo|na wykorzysta do pobrania imion u|ytkowników naszej internetowej tablicy ogBoszeD (przy zaBo|eniu, |e w polu name imi wystpuje jako pierwsze): SELECT user_name SUBSTRING(full_name, 1, INSTR(full_name, ' ')) FROM Users; Je[li szukany cig nie zostanie odnaleziony, funkcja INSTR zwraca warto[ 0. Konkatenacja cigów znaków W jzyku SQL istnieje funkcja sBu|ca do konkatenacji cigów znaków. W ró|nych serwe- rach baz danych funkcja ta mo|e nazywa si inaczej. W tym miejscu opisz skBadni pole- cenia w systemie MySQL: CONCAT(warto[1, warto[2, ..., warto[n) Aby na podstawie zawarto[ci tabeli Users uzyska sformatowany cig znaków skBadajcy si z nazwy u|ytkownika i adresu e-mail, mo|na wykona nastpujce zapytanie: SELECT CONCAT('Nazwa u|ytkownika: ', user_name, ' tAdres e-mail:', user_email) FROM Users; Przycinanie cigów znaków Funkcja TRIM usuwa wiodce i koDcowe spacja z cigów znaków. DziaBa tak samo jak odpo- wiadajca jej funkcja w PHP: RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych 261 SELECT user_name, TRIM(full_name), user_email FROM Users WHERE user_name LIKE 'F%'; Funkcje przetwarzania dat i godzin W jzyku SQL wystpuje kilka przydatnych funkcji przetwarzajcych daty i godziny. Nie s one standardowe i w ró|nych serwerach wystpuj pod innymi nazwami, ale wikszo[ podstawowych funkcji jest dostpna we wszystkich najpopularniejszych systemach baz danych. Now Aby odczyta bie|c dat i godzin w systemie MySQL i PostgreSQL, mo|na skorzysta z funkcji NOW. SELECT NOW(); INSERT INTO Orders (prodid, user_id, when) VALUES(445455423, 32345, Now()); Rok, miesic, dzieD W jzyku SQL wystpuje grupa funkcji sBu|cych do pobierania cz[ci warto[ci z dat. Funkcje te znacznie si ró|ni w ró|nych systemach baz danych. W bazie danych MySQL funkcja YEAR pobiera dat i na jej podstawie zwraca czterocyfrowy numer roku. Funkcja MONTH zwraca numer miesica daty, natomiast funkcje DAYOFMONTH, DAYOFWEEK i DAYNAME zwracaj informacje na temat dnia w ró|nym formacie. Formatowanie dat i godzin Chocia| we wszystkich systemach baz danych wystpuj funkcje sBu|ce do formatowa- nia dat i godzin, poszczególne implementacje bardzo si ró|ni pomidzy sob. W systemie MySQL do formatowania dat sBu|y funkcja DATE_FORMAT, która pobiera warto[ daty do sformatowania oraz cig formatu. DATE_FORMAT(sformatuj_mnie, cig_formatu) Parametr cig_formatu to sekwencja znaków, które s zastpowane odpowiednimi warto- [ciami dotyczcymi daty. Na przykBad: mysml> SELECT full_name, DATE_FORMAT(birthdate, '%W %D %M %Y') -> FROM Users -> WHERE birthdate <> '000-00-00'; +--------------------------------+---------------------------------------+ | full_name | DATE_FORMAT(birthdate, '%W %D %M %Y') | +--------------------------------+---------------------------------------+ | Krzysztof Malinowski | Tuesday 16th December 1980 | | Akira Tanaka | Wednesday 13th September 0000 | | Patrycja Dominikowska | Monday 31st March 1975 | +--------------------------------+---------------------------------------+ 3 rows in set (0.00 sec) D:\Roboczy Jarek\makiety poprawki i druku pdf\PHPiMySQL Tworzenie aplikacji WWW\09 druk\R11.doc (17-05-06) 261 262 Cz[ II Podstawowe wiadomo[ci o bazach danych Najpopularniejsze i najbardziej interesujce kody formatów zestawiono w tabeli 11.1. PeBn list warto[ci mo|na znalez w dokumentacji bazy danych MySQL. Tabela 11.1. Kody formatów funkcji DATE_FORMAT Kod Znaczenie %W DzieD tygodnia w jzyku serwera bazy danych (czsto jest nim jzyk angielski). %w DzieD tygodnia w formacie liczbowym (0= niedziela, 6= sobota). %Y Rok wedBug kalendarza juliaDskiego przedstawiony za pomoc 4 cyfr (na przykBad 1999). %y Rok wedBug kalendarza juliaDskiego przedstawiony za pomoc 2 cyfr (na przykBad 33). %M Nazwa miesica w jzyku serwera bazy danych (czsto jest nim jzyk angielski). %m Numer miesica w formacie liczbowym (01  12). %D DzieD miesica z przyrostkiem liczebnika porzdkowego dla jzyka angielskiego (1st, 2nd, 3rd itd.). %d DzieD miesica w formacie liczbowym (01  31) %H Godzina w formacie 24-godzinnym (00  23). %h Godzina w formacie 12-godzinnym (01  12). %p Przyrostek AM bdz PM. %i Minuta w formacie liczbowym (00  59). %S lub %s Sekunda w formacie liczbowym (00  59). Grupowanie danych dla funkcji agregacji Funkcje agregacji w jzyku SQL s jeszcze bardziej przydatne, je[li przed wykonaniem funkcji pogrupuje si warto[ci danych w tabeli. W zaprezentowanym poprzednio przykBa- dzie bazy danych z informacjami o pogodzie pokazaBem, w jaki sposób mo|na wykorzysta funkcj AVG do obliczenia [redniej warto[ci opadów w roku. Aby uzyska [redni warto[ opadów dla kilku lat, trzeba by byBo wykona kilka zapytaD i poda w nich ró|ne warto[ci lat. ByBoby o wiele wygodniej, gdyby mo|na to byBo zrobi za pomoc jzyka SQL. Klauzula GROUP BY umo|liwia grupowanie warto[ci w okre[lonej kolumnie przed wykonaniem funkcji agregacji dla ka|dej z grup: SELECT YEAR(date), AVG(daily_precip) FROM DailyWeatherReports GROUP BY YEAR(date); Klauzula GROUP BY razem ze skalarn funkcj YEAR umo|liwia pogrupowanie tabeli wedBug wspólnych warto[ci roku, a nastpnie wykonanie funkcji AVG dla wszystkich wierszy z po- szczególnych grup. Zapytanie mo|na jeszcze bardziej u[ci[li za pomoc klauzuli HAVING, która jest nieco podobna do klauzuli WHERE, ale dotyczy warunków ograniczajcych dla pod- klauzuli GROUP BY. PrzykBadowo, aby uzyska list lat, w których [rednia warto[ opadów przekroczyBa 50 mm, mo|na wykorzysta nastpujce zapytanie: RozdziaB 11. Wykorzystanie baz danych: zaawansowany dostp do danych 263 SELECT YEAR(date), AVG(daily_precip) FROM DailyWeatherReports GROUP BY YEAR(date) HAVING AVG(daily_precip) > 50; Dziki mo|liwo[ci Bczenia powy|szych wBasno[ci mo|na tworzy niezwykle skompliko- wane zapytania. Na przykBad, aby uzyska [redni warto[ opadów dla lat 1990  2000 dla wszystkich miast o rocznej [redniej warto[ci opadów przekraczajcej 50 mm, mo|na wyko- rzysta nastpujce zapytanie: SELECT YEAR(date), AVG(daily_precip) FROM DailyWeatherReports WHERE YEAR(date) BETWEEN 1990 AND 2000 GROUP BY YEAR(date) HAVING AVG(daily_precip) > 50; W pewnych sytuacjach trzeba doda bdz usun kolumn z tabeli. Mo|na to zrobi za pomoc instrukcji ALTER TABLE, która ma wiele mo|liwych zastosowaD. W tym podrozdziale zade- monstruj najcz[ciej stosowane: ALTER TABLE NazwaTabeli ADD NazwaKolumny TypKolumny atrybuty...; ALTER TABLE NazwaTabeli DROP COLUMN NazwaKolumny; ALTER TABLE NazwaTabeli CHANGE COLUMN NazwaKolumny Nowe_szczegóBy; ALTER TABLE NazwaTabeli RENAME AS NowaNazwaTabeli; Modyfikowanie schematu tabeli jest operacj, której nie nale|y wykonywa czsto. Trzeba mie pewno[, |e wykonywane dziaBania s prawidBowe. Celem projektowania jest utwo- rzenie struktury bazy danych, która jest wydajna, elastyczna, skalowalna i zapewni speBnie- nie potrzeb u|ytkowników w przyszBo[ci. Je[li zbyt czsto musimy modyfikowa schematy tabel, mo|e to oznacza konieczno[ powtórnego przeprowadzenia procesu projektowania tabel. Poza tym, modyfikowanie schematu tabel jest operacj kosztown. W niektórych systemach baz danych usunicie kolumny wymaga du|ej ilo[ci miejsca na dysku. Czsto tabela jest zablokowana przez caBy czas usuwania niepotrzebnych danych. Podobne, mniej lub bardziej przej[ciowe problemy z wydajno[ci, mog si zdarzy w przypadku dodawania nowych kolumn. Aby doda kolumn, nale|y skorzysta z klauzuli ADD i wprowadzi nazw nowej kolumny, jej typ danych oraz inne atrybuty. Na przykBad, aby w tabeli Users doda pole password sBu|ce do zapisywania haseB, mo|na wykorzysta nastpujce zapytanie: ALTER TABLE Users ADD password VARCHAR(50) NOT NULL; D:\Roboczy Jarek\makiety poprawki i druku pdf\PHPiMySQL Tworzenie aplikacji WWW\09 druk\R11.doc (17-05-06) 263 264 Cz[ II Podstawowe wiadomo[ci o bazach danych Powy|sze zapytanie dodaje now kolumn tekstow do tabeli Users z atrybutem NOT NULL wykluczajcym u|ycie NULL jako warto[ci w dowolnym z wierszy. Dla istniejcych wierszy w tabeli kolumna password zostanie ustawiona na pusty cig znaków ''. W jzyku SQL wy- stpuj dwa opcjonalne sBowa kluczowe  FIRST i AFTER, pozwalajce na okre[lenie miejsca w tabeli, w którym maj zosta umieszczone nowe kolumny: ALTER TABLE Users ADD password VARCHAR(50) NOT NULL AFTER user_name; Aby usun kolumn z tabeli, nale|y skorzysta z klauzuli DROP COLUMN. Na przykBad, aby usun kolumn password, któr dodali[my przed chwil, mo|na wykorzysta nastpujce zapytanie: ALTER TABLE Users DROP COLUMN password; Podobnie jak inne operacje, które powoduj usuwanie informacji z bazy danych, usunicie kolumny jest trwaBe i nie mo|na go cofn. Dlatego wBa[nie takie polecenia musz by u|ywane ze szczególn ostro|no[ci (i raczej nie nale|y zezwala na ich wykonywanie zwykBym u|yt- kownikom bazy danych). Do zmiany definicji kolumny sBu|y klauzula CHANGE (klauzul równowa|n jest MODIFY). W przypadku wprowadzenia nazwy w nowej definicji kolumny, kolumna zostanie przemia- nowana. Klauzul CHANGE mo|na równie| wykorzysta do zmiany typu oraz atrybutów ko- lumny. PrzykBadowo, aby zmieni typ pola user_name w tabeli Users na cig 100-znakowy, mo|na wykorzysta nastpujce zapytanie: ALTER TABLE Users CHANGE COLUMN user_name VARCHAR(100) NOT NULL; Aby zmieni nazw tabeli User, mo|na skorzysta z klauzuli RENAME: ALTER TABLE Users RENAME AS MessageBoardUsers; Instrukcj ALTER TABLE mog wykonywa tylko u|ytkownicy posiadajcy uprawnienie ALTER. Po lekturze tego rozdziaBu Czytelnik rozszerzyB swoj wiedz na temat jzyka SQL. Wyko- rzystali[my go do wykonywania coraz bardziej skomplikowanych zapytaD i operacji na danych. Dziki zastosowaniu transakcji mo|na wykona wiele instrukcji SQL w formie niepodzielnej operacji. Podczas obsBugi transakcji mo|na stosowa ró|ne poziomy izolacji i blokowania. Po lekturze tego rozdziaBu Czytelnik powinien wiedzie, w jaki sposób mo|na kwalifikowa i sortowa dane, wykorzystywa funkcje, a tak|e modyfikowa schemat tabel (pamitajc o kosztach tej operacji). Po lekturze ostatnich czterech rozdziaBów dysponujemy wystarczajc wiedz na temat baz danych, aby zacz z nich korzysta z poziomu kodu PHP. W nastpnym rozdziale przed- stawi sposoby nawizywania poBczenia z serwerem, wykonywania zapytaD i przegldania wyników z poziomu naszej aplikacji internetowej.

Wyszukiwarka

Podobne podstrony:
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie czwarte phmsv4
PHP i MySQL Tworzenie stron WWW VP Wyd3
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty phms2v
PHP i Oracle Tworzenie aplikacji webowych od przetwarzania danych po Ajaksa
helion php i mysql tworzenie sklepów internetowych
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II
informatyka php web 2 0 tworzenie aplikacji typu mashup shu wai chow ebook
PHP Web 2 0 Tworzenie aplikacji typu mashup phpw2m

więcej podobnych podstron