Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00444 009326 10484611 na godz. na dobę w sumie
Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP - książka
Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP - książka
Autor: Liczba stron: 656
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-1204-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Buduj swoje aplikacje na solidnych podstawach

Baza danych Oracle od dawna słynie z wyjątkowej stabilności, wydajności i... ceny! Jednak po wydaniu jej najnowszej wersji, oznaczonej symbolem 10g, producent zdecydował się na zaskakujący krok, udostępnił jedną z nich -- Express Edition -- bezpłatnie. Otworzyło to przed twórcami aplikacji sieciowych możliwości wykorzystania tego doskonałego produktu w projektach niskobudżetowych. Wszędzie tam, gdzie klienci oczekują zaplecza bazodanowego zbudowanego w oparciu o sprawdzony system i nieprzychylnie reagują na rozwiązania open-source, można dziś zaproponować Oracle Database 10g Express Edition. Aby jednak w aplikacjach internetowych w pełni wykorzystać możliwości tego rozwiązania, trzeba poznać specyficzne dla niego techniki programistyczne.

Książka 'Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP' to podręcznik, w którym znajdziesz omówienie wszystkich aspektów korzystania z bazy Oracle 10g w połączeniu ze skryptami PHP. Dowiesz się, jak zainstalować i skonfigurować środowisko robocze i poznasz najważniejsze elementy języka PHP. Nauczysz się tworzyć bezpieczne i wydajne aplikacje internetowe wykorzystujące ogromne możliwości bazy Oracle 10g Express Edition. Przeczytasz o uwierzytelnianiu użytkowników, zabezpieczaniu transakcji, stosowaniu procedur składowanych i obsłudze dużych obiektów. Znajdziesz tu również informacje o administrowaniu bazą Oracle, formułowaniu zapytań SQL oraz optymalizowaniu aplikacji pod kątem wydajności i szybkości działania.

Wykorzystaj pełnię możliwości Oracle 10g Express Edition,
budując wydajne i bezpieczne aplikacje internetowe.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP Autor: Michael McLaughlin T‡umaczenie: Rafa‡ Joæca ISBN: 978-83-246-1204-8 Tytu‡ orygina‡u: Oracle Database 10g Express Edition PHP Web Programming Format: B5, stron: 656 Zawiera CD-ROM Buduj swoje aplikacje na solidnych podstawach (cid:149) Poznaj zasady ‡„czenia skrypt(cid:243)w PHP z baz„ Oracle (cid:149) Wykorzystaj sesje do zabezpieczania transakcji bazodanowych (cid:149) Zoptymalizuj wydajno(cid:156)(cid:230) aplikacji Baza danych Oracle od dawna s‡ynie z wyj„tkowej stabilno(cid:156)ci, wydajno(cid:156)ci i... ceny! Jednak po wydaniu jej najnowszej wersji, oznaczonej symbolem 10g, producent zdecydowa‡ siŒ na zaskakuj„cy krok, udostŒpni‡ jedn„ z nich (cid:150) Express Edition (cid:150) bezp‡atnie. Otworzy‡o to przed tw(cid:243)rcami aplikacji sieciowych mo¿liwo(cid:156)ci wykorzystania tego doskona‡ego produktu w projektach niskobud¿etowych. WszŒdzie tam, gdzie klienci oczekuj„ zaplecza bazodanowego zbudowanego w oparciu o sprawdzony system i nieprzychylnie reaguj„ na rozwi„zania open-source, mo¿na dzi(cid:156) zaproponowa(cid:230) Oracle Database 10g Express Edition. Aby jednak w aplikacjach internetowych w pe‡ni wykorzysta(cid:230) mo¿liwo(cid:156)ci tego rozwi„zania, trzeba pozna(cid:230) specyficzne dla niego techniki programistyczne. Ksi„¿ka (cid:132)Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP(cid:148) to podrŒcznik, w kt(cid:243)rym znajdziesz om(cid:243)wienie wszystkich aspekt(cid:243)w korzystania z bazy Oracle 10g w po‡„czeniu ze skryptami PHP. Dowiesz siŒ, jak zainstalowa(cid:230) i skonfigurowa(cid:230) (cid:156)rodowisko robocze i poznasz najwa¿niejsze elementy jŒzyka PHP. Nauczysz siŒ tworzy(cid:230) bezpieczne i wydajne aplikacje internetowe wykorzystuj„ce ogromne mo¿liwo(cid:156)ci bazy Oracle 10g Express Edition. Przeczytasz o uwierzytelnianiu u¿ytkownik(cid:243)w, zabezpieczaniu transakcji, stosowaniu procedur sk‡adowanych i obs‡udze du¿ych obiekt(cid:243)w. Znajdziesz tu r(cid:243)wnie¿ informacje o administrowaniu baz„ Oracle, formu‡owaniu zapytaæ SQL oraz optymalizowaniu aplikacji pod k„tem wydajno(cid:156)ci i szybko(cid:156)ci dzia‡ania. (cid:149) Instalacja i konfiguracja Oracle Express, Apache i PHP (cid:149) Typy danych w PHP (cid:149) Instrukcje i polecenia jŒzyka PHP (cid:149) Programowanie obiektowe (cid:149) Obs‡uga b‡Œd(cid:243)w (cid:149) Praca z systemem plik(cid:243)w (cid:149) Korzystanie z plik(cid:243)w cookie i mechanizm(cid:243)w sesji (cid:149) Po‡„czenie skryptu z baz„ danych Oracle (cid:149) Operacje na danych w bazie (cid:149) Korzystanie z procedur sk‡adowanych (cid:149) Obs‡uga obiekt(cid:243)w typu BLOB Wykorzystaj pe‡niŒ mo¿liwo(cid:156)ci Oracle 10g Express Edition, buduj„c wydajne i bezpieczne aplikacje internetowe Wydawnictwo Helion ul. Ko(cid:156)ciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Spis treści O autorze ................................................................................................. 11 Wprowadzenie .......................................................................................... 13 Część Rozdział 1. Omówienie PHP i programowania stron WWW I Podstawy języka PHP ......................................................... 17 Rozdział 2. z użyciem baz danych Oracle .................................................................... 19 Historia i tło .................................................................................................................................. 20 Czym jest PHP? ...................................................................................................................... 20 Czym jest Oracle? .................................................................................................................. 21 Czym jest Zend? ..................................................................................................................... 21 Tworzenie rozwiązań dla aplikacji internetowych ....................................................................... 22 Co i gdzie się umieszcza i dlaczego właśnie tak? .................................................................. 22 Co oferuje Oracle dla języka PHP? ........................................................................................ 24 Dlaczego PHP 5 jest istotny? ................................................................................................. 24 Podsumowanie .............................................................................................................................. 24 Instalacja i konfiguracja Oracle Express, Apache i PHP ............................. 25 Instalacja na platformie Linux ...................................................................................................... 26 Apache .................................................................................................................................... 26 Oracle Database Express Edition ........................................................................................... 27 PHP ......................................................................................................................................... 31 Instalacja na platformie Windows XP .......................................................................................... 37 Apache .................................................................................................................................... 38 Oracle Database Express Edition ........................................................................................... 42 PHP ......................................................................................................................................... 46 Podsumowanie .............................................................................................................................. 58 Rozdział 3. Tworzenie stron WWW .............................................................................. 59 Określanie fragmentów z kodem PHP .......................................................................................... 59 Wysyłanie danych jako części strony WWW .................................................................................. 62 Umieszczanie komentarzy w skryptach PHP ............................................................................... 67 Jednowierszowe komentarze o składni znanej z języków C++, C#, Java lub JavaScript ...... 67 Wielowierszowe komentarze o składni znanej z języków C++, C#, Java lub JavaScript ..... 68 Jednowierszowe komentarze znane ze skryptów powłoki systemu Unix .............................. 68 Podsumowanie .............................................................................................................................. 68 6 Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP Rozdział 4. Zmienne, operatory, typy danych i dołączanie plików ................................. 69 Zmienne ........................................................................................................................................ 69 Zmienne definiowane przez użytkownika .............................................................................. 70 Operatory ................................................................................................................................ 73 Typy danych ........................................................................................................................... 80 Zmienne globalne ................................................................................................................... 85 Zmienne predefiniowane ........................................................................................................ 86 Dołączanie plików bibliotecznych ................................................................................................ 87 Słowa kluczowe i stałe systemowe ............................................................................................... 89 Podsumowanie .............................................................................................................................. 91 Rozdział 5. Struktury sterujące .................................................................................. 93 Instrukcje warunkowe ................................................................................................................... 93 Instrukcja if ............................................................................................................................ 94 Instrukcja switch .................................................................................................................... 97 Pętle ............................................................................................................................................ 100 Pętla do-while ....................................................................................................................... 100 Pętla for ................................................................................................................................ 101 Pętla foreach ......................................................................................................................... 103 Pętla while ............................................................................................................................ 105 Podsumowanie ............................................................................................................................ 107 Część II Programowanie w języku PHP ............................................. 109 Rozdział 6. Tablice ................................................................................................... 111 Definiowanie tablic ..................................................................................................................... 113 Zarządzanie tablicami ................................................................................................................. 121 Funkcje identyfikujące i zliczające ...................................................................................... 121 Funkcje tworzące tablice o zadanych wymiarach ................................................................ 123 Funkcje zarządzające dostępem w stylu kolejkowym .......................................................... 124 Funkcje wyszukujące ........................................................................................................... 126 Funkcje przejścia .................................................................................................................. 131 Sortowanie tablic ........................................................................................................................ 133 Funkcje sort() i rsort() .......................................................................................................... 134 Funkcje asort() i arsort() ....................................................................................................... 136 Funkcje ksort() i krsort() ...................................................................................................... 136 Funkcje natsort() i natcasesort() ........................................................................................... 137 Funkcja array_multisort() ..................................................................................................... 139 Funkcje usort() i uksort() ...................................................................................................... 140 Łączenie i dzielenie tablic .......................................................................................................... 141 Składnie tablic ...................................................................................................................... 146 Łączenie tablic ...................................................................................................................... 147 Wydobywanie fragmentów tablic ........................................................................................ 148 Zastępowanie fragmentu tablicy .......................................................................................... 149 Znajdowanie części wspólnej tablic ..................................................................................... 151 Poznawanie różnic między tablicami ................................................................................... 152 Podsumowanie ............................................................................................................................ 152 Rozdział 7. Funkcje ................................................................................................. 153 Definiowanie funkcji .................................................................................................................. 154 Zasięg zmiennych w funkcjach .................................................................................................. 157 Parametry funkcji ....................................................................................................................... 160 Przekazywanie parametrów przez wartość lub referencję ................................................... 160 Domyślne wartości parametrów ........................................................................................... 163 Listy parametrów o zmiennej długości ................................................................................ 164 Spis treści 7 Funkcje zwracające wartość ....................................................................................................... 165 Zarządzanie dynamicznymi wywołaniami funkcji ..................................................................... 168 Funkcje rekurencyjne ................................................................................................................. 171 Podsumowanie ............................................................................................................................ 174 Rozdział 8. Obiekty .................................................................................................. 175 Definiowanie klas i używanie obiektów ..................................................................................... 177 Definiowanie klasy i tworzenie jej egzemplarza .................................................................. 179 Definiowanie składowych, metod i stałych .......................................................................... 182 Metody ustawiające i pobierające ........................................................................................ 187 Definiowanie klas używających dziedziczenia i polimorfizmu ................................................. 188 Tworzenie podklas i przesłanianie operacji ......................................................................... 190 Wykorzystanie interfejsów i klas abstrakcyjnych ................................................................ 193 Implementacja obiektów ............................................................................................................. 196 Klonowanie .......................................................................................................................... 198 Porównywanie, wyświetlanie zawartości i podpowiadanie typów ...................................... 201 Introspekcja klas i obiektów ................................................................................................. 205 Podsumowanie ............................................................................................................................ 210 Rozdział 9. Zarządzanie błędami i obsługa wyjątków ................................................. 211 Zarządzanie błędami ................................................................................................................... 213 Konfiguracja zrządzania błędami ......................................................................................... 213 Obsługa błędów .................................................................................................................... 215 Obsługa wyjątków ...................................................................................................................... 219 Blok try-catch ....................................................................................................................... 220 Klasa Exception .................................................................................................................... 222 Obsługa wyjątków w praktyce ............................................................................................. 226 Podsumowanie ............................................................................................................................ 229 Rozdział 10. Obsługa plików ...................................................................................... 231 Pliki w systemie plików .............................................................................................................. 232 Funkcje informujące o parametrach pliku ............................................................................ 235 Funkcje lokalizujące pliki .................................................................................................... 242 Funkcje zarządzania plikami ................................................................................................ 244 Funkcje stanu pliku .............................................................................................................. 252 Funkcje obsługi systemu plików .......................................................................................... 254 Odczyt i zapis plików ................................................................................................................. 256 Odczyt plików ...................................................................................................................... 262 Zapis plików ......................................................................................................................... 268 Uzyskiwanie plików od użytkowników ............................................................................... 272 Podsumowanie ............................................................................................................................ 275 Część III Tworzenie aplikacji w języku PHP ......................................... 277 Rozdział 11. Proste uwierzytelnianie PHP i formularze ................................................ 279 Opis zdalnego wykonywania procedur ....................................................................................... 280 Proste uwierzytelnianie HTTP .................................................................................................... 281 Tworzenie formularzy uwierzytelniania ..................................................................................... 286 Podsumowanie ............................................................................................................................ 300 Rozdział 12. Cookies i sesje ...................................................................................... 301 Definiowanie i wykorzystywanie danych cookies ..................................................................... 303 Definiowanie i wykorzystywanie danych sesji .......................................................................... 307 Dane cookies i sesje w praktyce ................................................................................................. 313 Podsumowanie ............................................................................................................................ 324 8 Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP Część IV Aplikacje internetowe wykorzystujące bazę danych Oracle Express ....................... 325 Rozdział 13. Zapytania i transakcje w Oracle SQL ...................................................... 327 Połączenie z bazą Oracle za pomocą biblioteki OCI8 ................................................................ 330 Wykorzystanie biblioteki funkcji OCI8 ..................................................................................... 340 Podsumowanie funkcji z biblioteki OCI8 ............................................................................ 340 Wprowadzenie do modeli bazodanowych ............................................................................ 347 Przykład tworzenia zapytania ............................................................................................... 348 Przykład uruchamiania transakcji ........................................................................................ 349 Przykład zmiany hasła użytkownika .................................................................................... 353 Zapytania i transakcje wykorzystujące instrukcje SQL ............................................................. 354 Podsumowanie ............................................................................................................................ 363 Rozdział 14. Transakcje Oracle PL/SQL ...................................................................... 365 Wyjaśnienie sposobu działania procedur zapamiętanych PL/SQL ............................................ 366 Wykorzystanie kursorów referencyjnych i procedur zapamiętanych PL/SQL .......................... 367 Użycie tablic asocjacyjnych z wartościami skalarnymi i procedur zapamiętanych PL/SQL ..... 372 Użycie kolekcji skalarnych i procedur zapamiętanych PL/SQL ................................................ 377 Użycie typu danych NESTED TABLE ................................................................................ 381 Użycie typu danych VARRAY ............................................................................................ 385 Podsumowanie ............................................................................................................................ 387 Rozdział 15. Transakcje Oracle dotyczące dużych obiektów ........................................ 389 Definicje funkcji dużych obiektów i klasa OCI-Lob .................................................................. 390 Wykorzystanie typów danych BLOB, CLOB i NCLOB ........................................................... 395 Jak odczytać kolumny CLOB? ............................................................................................. 396 Aktualizacja kolumn CLOB ................................................................................................. 404 Wykorzystanie typów danych CFILE i BFILE ............................................................................ 410 Konfiguracja środowiska dla plików BFILE ....................................................................... 411 Pobieranie kolumny BFILE za pomocą polecenia SQL ...................................................... 413 Pobieranie kolumny BFILE za pomocą polecenia PL/SQL ................................................. 416 Przesył plików BFILE na serwer ......................................................................................... 418 Podsumowanie ............................................................................................................................ 422 .......................................................................................... 423 Dodatki Dodatek A Znaczniki HTML ..................................................................................... 425 Dodatek B Teksty, narzędzia i techniki .................................................................... 431 Dodatek C Stałe środowiska PHP ............................................................................ 439 Dodatek D Interfejsy środowiska i typy obiektów ..................................................... 457 Dodatek E Funkcje obsługi plików w standardzie POSIX ........................................... 463 Dodatek F Funkcje dotyczące daty i czasu .............................................................. 473 Dodatek G Wprowadzenie do baz danych Oracle ....................................................... 491 Architektura baz danych Oracle ................................................................................................. 491 Uruchamianie i wyłączanie bazy danych Oracle ........................................................................ 496 Operacje w systemie Linux .................................................................................................. 497 Operacje w systemie Windows ............................................................................................ 500 Uruchamianie i wyłączanie procesu nasłuchującego ................................................................. 503 Spis treści 9 Wykorzystywanie programu SQL*Plus ..................................................................................... 508 Interfejs wiersza poleceń ...................................................................................................... 509 Interfejs WWW .................................................................................................................... 514 Podsumowanie ............................................................................................................................ 517 Dodatek H Wprowadzenie do SQL ............................................................................ 519 Typy danych kolumn tabel ......................................................................................................... 520 Język definicji danych (DDL) .................................................................................................... 523 Zarządzanie tabelami i ograniczeniami ................................................................................ 524 Zarządzanie widokami ......................................................................................................... 527 Zarządzanie procedurami zapamiętanymi ............................................................................ 529 Zarządzanie sekwencjami .................................................................................................... 529 Zarządzanie własnymi typami .............................................................................................. 532 Język pobierania danych (DQL) ................................................................................................. 533 Zapytania .............................................................................................................................. 534 Język modyfikacji danych (DML) .............................................................................................. 536 Polecenia INSERT ............................................................................................................... 536 Polecenia UPDATE .............................................................................................................. 538 Polecenia DELETE .............................................................................................................. 539 Język sterowania danymi (DCL) ................................................................................................ 540 Podsumowanie ............................................................................................................................ 540 Dodatek I Wprowadzenie do PL/SQL ...................................................................... 541 Struktura bloków PL/SQL .......................................................................................................... 542 Zmienne, przypisania i operatory ............................................................................................... 545 Struktury sterujące ...................................................................................................................... 549 Instrukcje warunkowe .......................................................................................................... 550 Pętle ...................................................................................................................................... 552 Procedury zapamiętane, funkcje zapamiętane oraz pakiety ....................................................... 555 Funkcje zapamiętane ............................................................................................................ 556 Procedury ............................................................................................................................. 559 Pakiety .................................................................................................................................. 561 Wyzwalacze bazodanowe ........................................................................................................... 564 Wyzwalacze DDL ................................................................................................................ 565 Wyzwalacze DML ................................................................................................................ 565 Wyzwalacze „zamiast” ......................................................................................................... 567 Wyzwalacze systemowe lub bazodanowe ............................................................................ 567 Kolekcje ...................................................................................................................................... 568 Typ danych VARRAY ......................................................................................................... 569 Typ danych NESTED TABLE ............................................................................................. 570 Tablica asocjacyjna .............................................................................................................. 571 Interfejs kolekcji ................................................................................................................... 574 Wykorzystanie pakietu DBMS_LOB ......................................................................................... 574 Konfiguracja i weryfikacja środowiska dla typów LOB ...................................................... 576 Zapis i odczyt typu danych CLOB ....................................................................................... 577 Lokalizacja i odczyt typu danych BFILE ............................................................................. 582 Podsumowanie ............................................................................................................................ 584 Dodatek J Skrypty przykładowych baz danych ......................................................... 585 Utworzenie wyzwalaczy zapamiętujących czas łączenia i rozłączania ...................................... 586 Utworzenie struktury danych dla wypożyczalni filmów ............................................................ 588 Wypełnienie bazy danych wypożyczalni filmów danymi .......................................................... 599 Utworzenie bazy danych prezydentów, zdefiniowanie kodu i wypełnienie tablicy danymi ...... 614 Podsumowanie ............................................................................................................................ 625 Skorowidz .............................................................................................. 627 Część IV Aplikacje internetowe wykorzystujące bazę danych Oracle Express Rozdział 13. ♦ Zapytania i transakcje w Oracle SQL 327 Rozdział 13. Zapytania i transakcje w Oracle SQL Niniejszy rozdział omawia połączenie się z bazą danych Oracle Database 10g XE w trybie zapy- tań lub trybie transakcyjnym i wykorzystanie obiektów schematu bazy danych: tabel, widoków i procedur zapamiętanych. Choć baza danych udostępnia standardowy język zapytań SQL, obsłu- guje dodatkowo wzbogacony język PL/SQL. Rozwiązania dotyczące standardowego SQL poja- wią się w tym rozdziale, natomiast opis obsługi wartości skalarnych, kolekcji i kursorów referen- cyjnych za pomocą PL/SQL zostanie opisany w rozdziale 14. Rozdział 2. wyjaśnia proces instalacji bazy danych Oracle Database 10g XE, jej konfigurację i weryfikację połączenia. Aby wykonać przykłady prezentowane w tym rozdziale, trzeba posia- dać poprawnie skonfigurowane aplikacje Apache, PHP i Oracle. Wszystkie prezentowane przy- kłady były testowane w PHP 5.1.4, ale powinny działać we wszystkich wersjach PHP od 5.1.2. Przed wersją 5.1.2 trzeba korzystać z innego zestawu bibliotek. Co więcej, liczba dostępnych funkcji jest uboższa. W nowszej wersji PHP starsze funkcje działają jako aliasy dla nowszych funkcji, ale warto w trakcie migracji zmienić nazwy wywoływanych funkcji na nowsze. Warto zainstalować nowszą wersję PHP, by skorzystać z nowej biblioteki OCI8. Przed rozpoczęciem czytania tego rozdziału warto przeczytać wprowadzenia do języków SQL i PL/SQL zawarte w dodatkach H i I. Dodatkowo, podstawowy kod wykorzystywany w roz- działach od 13. do 15. został bardziej szczegółowo opisany w dodatku J. Rozdział został podzielony na trzy części: (cid:141) Połączenie z bazą Oracle za pomocą biblioteki OCI8 (cid:141) Wykorzystanie biblioteki funkcji OCI8 (cid:141) Zapytania i transakcje wykorzystujące instrukcje SQL Podrozdziały warto czytać po kolei. Pierwszy podrozdział opisuje trzy sposoby łączenia się z bazą danych Oracle. Różnią się one zachowaniem i funkcjonalnością. Drugi podrozdział sta- nowi podsumowanie funkcji OCI8 i prezentuje wykonywanie podstawowych operacji SQL — INSERT, SELECT, UPDATE i DELETE — z poziomu kodu PHP. Podrozdział opisuje użycie instrukcji 328 Część IV ♦ Aplikacje internetowe wykorzystujące bazę danych Oracle Express INSERT i UPDATE do wstawiania i aktualizacji pojedynczych wierszy. Pojedyncze polecenie INSERT lub UPDATE może aktualizować wiele wierszy danych, jeśli wykorzystamy tzw. dowiąza- nia. Sposób ich działania szczegółowo omawia trzeci z podrozdziałów. Zmienne dowiązania odwzorowują wartości skalarne i kolekcje w poleceniach SQL. Obecnie biblioteka OCI8 obsługuje jedynie ograniczony zestaw typów danych dostępnych w bazie danych Oracle Database 10g XE. Zespół programistów odpowiedzialny za rozwój biblio- teki OCI8 planuje dodanie obsługi odczytu i zapisu obiektów PL/SQL bezpośrednio z poziomu aplikacji PHP. Data wprowadzenia tej funkcji nie jest jeszcze znana. Aktualnych informacji na ten temat warto szukać w witrynie http://otn.oracle.com. W razie napotkania problemów w trakcie korzystania z bazy danych lub biblioteki OCI8 można skorzystać z wielu narzędzi wspomagających poszukiwanie przyczyny ich powstawiania. Doda- tek G opisuje narzędzie tnspring, które ułatwia testowanie nasłuchiwania serwera bazy danych na konkretnym porcie. Ten sam dodatek wyjaśnia, w jaki sposób testować, czy baza danych została uruchomiona, i jak wykonać proste zapytania SQL. Istnieje pięć skryptów SQL, z których warto skorzystać w trakcie wykonywania przykładów z niniejszego rozdziału. Skrypt create_user.sql został opisany w dodatku G. Należy go urucho- mić jako użytkownik SYSTEM, by utworzyć schemat bazy danych i użytkownika dla prezentowa- nych przykładów. Skrypty przedstawiane w dodatku J zakładają wcześniejsze uruchomienie wspomnianego skryptu. Jeśli chcesz skorzystać z innego użytkownika niż proponowany, należy zmodyfikować prezentowane przykłady. W jaki sposób zainstalować Oracle Instant Client? Biblioteki OCI8 można zainstalować na komputerze lokalnym pracującym pod kontrolą systemu Win- dows lub Linux. Przedstawione kroki należy wykonać tylko wtedy, gdy zamierza się testować progra- my PHP na innym komputerze niż ten, na którym zainstalowano serwer Apache i bazę danych. Instalacja w systemie Linux Z witryny http://otn.oracle.com pobierz dwa pliki zawarte w archiwum TAR o nazwie oracle-client- 10103.tar.bz2. Zapisz plik w dowolnej lokalizacji, a następnie rozpakuj go, wykonując poniższe pole- cenie z poziomu konsoli systemowej: tar -xvjf oracle-client-10103.tar.bz2 Po rozpakowaniu w folderze pojawią się dwa pliki o nazwach: oracle-istantclient-basic-10.1.0.3-1.i386.rpm oracle-istantclient-devel-10.1.0.3-1.i386.rpm Plik basic zawiera bibliotekę OCI8, która zostanie zainstalowana w folderze /usr/lib/oracle/10.1.0.3/ client/lib. Plik devel zawiera pliki nagłówków i pliki instalacyjne, które umieszcza w folderze /usr/ include/oracle/10.1.0.3/client. Instalację można przeprowadzić ręcznie lub za pomocą dołączonego skryptu, wywoływanego poniższym poleceniem: ./runmefirst.sh Ponowna konfiguracja PHP wymaga wywołania polecenia: ./configure --with-oci8-instantclient=/usr/lib/oracle/10.1.0.3/client/lib --prefix=$HOME/php --with-apxs=$HOME/apache/bin/apxs --enable-sigchild --with-config-file-path=$HOME/apache/conf Rozdział 13. ♦ Zapytania i transakcje w Oracle SQL 329 Ponowną kompilację rozpoczyna polecenie make. Następnie należy ustawić zmienną środowiskową LD_LIBRARY_PATH na folder /usr/lib/oracle/10.1.0.3/client/lib i ponownie uruchomić serwer Apache. Do wykrycia przyczyny ewentualnych błędów użyj pliku dziennika błędów serwera Apache. Dodatkowo należy pamiętać o ustawieniu zmiennej środowiskowej TNS_ADMIN, by wskazywała na lokalizację pliku tnsnames.ora, jeśli korzysta się tylko i wyłącznie z Oracle Instant Client. Więcej informacji na temat połączeń sieciowych w Oracle zawiera dodatek G. Więcej informacji na temat sposobu instalacji bibliotek można znaleźć w ogólnodostępnej dokumentacji Oracle Database Client Quick Installation Guide. Instalacja w systemie Windows Z witryny http://otn.oracle.com pobierz trzy pliki zawarte w pliku ZIP dostępnym do pobrania na stronie dotyczącej Oracle Database 10g Release 1. Rozpakuj pliki zawarte w archiwum. W folderze pojawią się trzy pliki: oraociei10.dll orannzsbb10.dll oci.dll Pliki można umieścić w dowolnej lokalizacji, ale najczęściej przyjmuje się folder C:instantclient10_1. Po utworzeniu folderu należy jego lokalizację dodać do zmiennej środowiskowej PATH. Warto dodać ją jako pierwszą ze ścieżek wymienianych w zmiennej środowiskowej. Jeśli korzystasz z pliku tnsnames.ora, umieść go w tym samym folderze i ustaw zmienną środowiskową TNS_ADMIN, by wskazywała na ten folder. Domyślne ustawienia językowe zostaną pobrane z danych systemu operacyjnego. Aby je zmienić, wystarczy zdefiniować zmienną środowiskową NLS_LANG. Więcej informacji na ten temat znajduje się w książkach Steve’a Borowskiego Hands-on Oracle Da- tabase 10g Expres Edition for Windows i podręczniku Oracle Database Express Edition 2 Day DBA. Po instalacji klienta ponownie uruchom serwer Apache. Do wykrycia przyczyny ewentualnych błędów użyj pliku dziennika błędów serwera Apache. Analizator składniowy OCI8 uniemożliwia użycie znaku wieloznaczności SQL, którym jest znak . Wprowadzenie wyrażeń wieloznacznych wymaga zastąpienia frazy LIKE wywołaniem REGEXP_ LIKE(). Wspomniana funkcja jest dostępna w Oracle Database 10gR2 i może nie być do- stępna we wcześniejszych wersjach. Niniejszy rozdział wymaga skryptów create_signon_triggers.sql, create_store.sql i seed_store.sql. Zostały one przedstawione w dodatku J. Oto krótki opis znaczenia poszczególnych skryptów: (cid:141) Skrypt create_signon_triggers.sql wspomaga wykonanie połączenia z bazą danych Oracle za pomocą bibliotek OCI8 przedstawionych w pierwszym z podrozdziałów. (cid:141) Skrypty create_store.sql i seed_store.sql tworzą i wypełniają tabele bazy danych wykorzystywane w dwóch pozostałych podrozdziałach. Niniejszy rozdział wymaga posiadania lokalnej bazy danych Oracle 10gR2 lub przynajmniej zainstalowanego klienta Oracle. W architekturze wielowarstwowej jako całkowite minimum trzeba posiadać zainstalowany serwer Apache z PHP i biblioteki Oracle Client. W ten sposób system uzyskuje możliwość łączenia się ze zdalną bazą danych nasłuchującą połączeń nadcho- dzących z innych komputerów. Pierwszy z podrozdziałów opisuje trzy możliwe sposoby łączenia się z bazą danych Oracle oraz prezentuje przykłady tych połączeń. 330 Część IV ♦ Aplikacje internetowe wykorzystujące bazę danych Oracle Express Połączenie z bazą Oracle za pomocą biblioteki OCI8 Biblioteka OCI8 udostępnia trzy rodzaje połączeń z bazą danych Oracle. (cid:141) Połączenie standardowe — tworzy połączenie bazodanowe dobre na czas wykonywania skryptu lub do momentu jawnego zamknięcia połączenia przez skrypt. Wszystkie wywołania do bazy danych w skrypcie korzystają z tego samego połączenia, dopóki jawnie nie otworzymy nowego połączenia, wywołując funkcję oci_new_connect(). Standardowe połączenie dodaje narzut łączenia się z serwerem i przekazywania danych uwierzytelniających przy każdym uruchomieniu skryptu — między żądaniami HTTP nie jest pamiętany żaden stan połączenia bazodanowego. (cid:141) Połączenie unikatowe — tworzy połączenie bazodanowe dobre na czas wykonywania skryptu lub do momentu jawnego zamknięcia połączenia przez skrypt. Połączenie to zapewnia, iż jeden skrypt może posiadać wiele niezależnych połączeń do bazy danych, o ile stosują one autonomiczne transakcje. Transakcje autonomiczne działają symultanicznie zamiast sekwencyjnie, bo wyniki ich działań nie zależą od innych transakcji. Połączenia unikatowe również dodają narzut łączenia się z serwerem i przekazywania danych uwierzytelniających przy każdym uruchomieniu skryptu — między żądaniami HTTP nie jest pamiętany żaden stan połączenia bazodanowego. (cid:141) Połączenie trwałe — tworzy połączenie bazodanowe dobre na czas wykonywania skryptu lub do momentu jawnego zamknięcia połączenia przez skrypt. Wszystkie wywołania do bazy danych w skrypcie korzystają z tego samego połączenia, dopóki jawnie nie otworzymy nowego połączenia, wywołując funkcję oci_new_connect(). Połączenie trwałe dodaje narzut łączenia się z serwerem i przekazywania danych uwierzytelniających jedynie przy pierwszym żądaniu (do momentu kolejnego wywołania wspomnianej funkcji) — między żądaniami HTTP serwer pamięta stan połączenia bazodanowego z wcześniejszego skryptu. Połączenie trwałe zostaje zamknięte dopiero po określonym czasie bezczynności (a nie po zakończeniu skryptu), więc trzeba bardzo uważnie dobrać dopuszczalny czas nieaktywności, by nie marnować cennych zasobów. Plik php.ini zawiera kilka opcji konfiguracyjnych dla biblioteki OCI8. Określają one sposób działania połączeń w środowisku PHP. Środowisko zastosuje wartości domyślne dla tych ustawień, jeśli nie określimy ich jawnie. Z tego powodu warto upewnić się, czy ustawienia domyślne są odpowiednie. Tabela 13.1 przedstawia dostępne dyrektywy konfiguracyjne. Bardzo szczegółowa analiza działania systemu powinna poprzedzać jakiekolwiek zmiany w domyślnych wartościach dyrektyw OCI8 w pliku php.ini. Połączenia trwałe po czasie bezczyn- ności może zamykać Apache lub Oracle. Jeśli chcemy odpowiedzialność za to zrzucić na Apache, warto przyjrzeć się opcjom MaxRequestPerChild, MaxSpareServers i KeepAlive. W bazie danych Oracle przerywanie bezczynnych połączeń odbywa się po ustawieniu opcji IDLE_TIMEOUT w ustawieniach profilu użytkownika. Niezależnie od wyboru sposobu realizacji połączeń należy przeprowadzić wiele testów wydaj- nościowych przed wprowadzeniem danego rozwiązania do systemu produkcyjnego. Dzięki testom można uniknąć nieprzyjemnych efektów w trakcie obsługi istotnych klientów. Rozdział 13. ♦ Zapytania i transakcje w Oracle SQL 331 Tabela 13.1. Dyrektywy OCI8 w pliku php.ini Nazwa Wartość domyślna oci8.privileged_connect oci8.max_persistent oci8.persistent_timeout oci8.ping_interval 0 -1 -1 60 oci8.statement_cache_size 20 oci8.default_prefetch 10 oci8.old_oci_close_semantics 0 Opis Opcja umożliwia wykonywanie uprzywilejowanych połączeń dla ról SYSOPER i SYSDBA. Domyślnie połączenia te są wyłączone. By je włączyć, ustaw dyrektywę na wartość 1. Opcja określa maksymalną liczbę trwałych połączeń. Domyślnie nie jest nakładane żądne ograniczenie. Ustawienie wartości dodatniej nakłada ograniczenie na liczbę trwałych połączeń. Wartość 0 wyłącza trwałe połączenia. Określa maksymalny czas bezczynności dla trwałych połączeń. Domyślnie połączenia trwałe mogą pozostawać otwarte dowolnie długo. Opcja określa czas sprawdzania poprawności trwałych połączeń. Wyłączenie opcji zwiększa szybkość działania trwałych połączeń, ale nie wykrywa błędów w komunikacji, które mogą zdarzyć się na dalszym etapie realizacji skryptu. Ustawienie wartości 0 wyłącza sprawdzanie trwałych połączeń. Określa liczbę buforowanych poleceń SQL i jest równoznaczne zapamiętywaniu poleceń w SGA. By wyłączyć buforowanie, ustaw dyrektywę na wartość 0. Ustawia domyślną liczbę wierszy, która zostaje pobrana zaraz po wykonaniu polecenia SQL. Zwiększenie wartości poprawia czas reakcji dla skryptów przetwarzających wiele wierszy danych. Warto pozostawić tę dyrektywę na domyślnej wartości, a gdy to konieczne, używać funkcji oci_set_prefetch() w skryptach wymagających przetwarzania dużej ilości danych. Włącza zgodność wstecz i wyłącza wykonywanie jakichkolwiek działań przez funkcję oci_close(). Oracle zaleca usunięcie wywołań tej funkcji przed włączeniem tej dyrektywy. Warto ustawić odpowiedni bufor dla sekwencji SYS.AUDSES$, jeśli do bazy danych w ciągu sekundy będzie wykonywanych kilkaset połączeń. Można początkowo ustawić wartość na 10 000, a następnie monitorować, czy jest wystarczająca. Sekwencja SYS.AUDSES$ jest wykonywana jako część zestawiania połączenia. Istnieją tylko cztery funkcje OCI8 związane z otwieraniem i zamykaniem połączeń. Istnieje również funkcja oci_error(), która zwraca informację o rodzaju błędu, jeśli połączenie z bazą danych nie powiodło się. Wszystkich pięć funkcji zostało wymienionych w tabeli 13.2. Nazwy funkcji pisane kursywą zostały wycofane z użycia i pochodzą ze starszych wersji OCI. Obecnie stanowią aliasy dla nowszych nazw funkcji. 332 Część IV ♦ Aplikacje internetowe wykorzystujące bazę danych Oracle Express Tabela 13.2. Funkcje łączenia i rozłączania z bazą danych Oracle Funkcja oci_close() ocilogoff() oci_error() ocierror() oci_connect() ocilogin() oci_new_connect() ocinlogin() oci_pconnect() ociplogin() Opis Funkcja jawnie zamyka otwarte połączenie bazodanowe w trakcie działania skryptu. To nowe zachowanie biblioteki OCI8 począwszy od PHP 5.1.2. Funkcja przyjmuje jeden parametr, którym jest zasób połączenia. Zwraca wartość logiczną true po udanym rozłączeniu lub wartość false w sytuacji przeciwnej. Nie trzeba jawnie wywoływać funkcji, ponieważ jest ona wykonywana niejawnie po zakończeniu skryptu. Składnia funkcji: bool oci_close(resource połączenie) Funkcja zwraca tablicę wartości. Przyjmuje jeden opcjonalny parametr, którym jest zasób połączenia. Bez podania parametru zwraca błąd dotyczący ostatnio otwartego połączenia. Zwrócona tablica zawiera elementy code, message, offset i sqltext. Element code określa kod błędu z bazy danych Oracle, element message w krótki sposób opisuje rodzaj błędu, element offset zawiera numer wiersza z błędem, a element sqltext zawiera fragment polecenia SQL z błędem. Składnia funkcji: array oci_error([resource połączenie]) Funkcja zwraca zasób połączenia po poprawnym połączeniu z bazą danych lub wartość false, jeśli połączenie nie powiodło się. Przyjmuje pięć parametrów, z których pierwsze dwa są wymagane. W rzeczywistości najczęściej w trakcie połączenia podaje się trzy parametry. Trzeci parametr dotyczący nazwy bazy danych w wielu sytuacjach jest odwzorowywany automatycznie przez plik tnsnames.ora, ale można również wskazać bazę danych ręcznie, podając ją w kodzie PHP. Czwarty parametr (kodowanie znaków) jest pobierany z systemu operacyjnego, jeśli nie przekaże się go jawnie. Piąty parametr określa rodzaj połączenia i przyjmuje domyślną wartość OCI_DEFAULT, co powoduje niemożność połączenia się jako użytkownik uprzywilejowany. Użycie innego trybu (OCI_SYSOPER lub OCI_SYSDBA) wymaga dodatkowo zmiany dyrektywy oci.privileged_connect na wartość 1. Składnia funkcji: resource oci_connect(string nazwa_użytkownika, string hasło [, string nazwa_bazy [, string kodowanie_znaków [, string tryb_sesji]]]) Funkcja zwraca zasób połączenia po poprawnym połączeniu z bazą danych lub wartość false, jeśli połączenie nie powiodło się. Jeśli skrypt użył wcześniej funkcji oci_connect(), tworzy nowe połączenie bazodanowe. Niedokończone (niezatwierdzone) transakcje z jednego połączenia są niedostępne w drugim połączeniu i mogą się nawet wzajemnie blokować. Funkcja przyjmuje tych samych pięć parametrów, co funkcja oci_connect(). Ich znaczenie również jest identyczne. Składnia funkcji: resource oci_new_connect(string nazwa_użytkownika, string hasło [, string nazwa_bazy [, string kodowanie_znaków [, string tryb_sesji]]]) Funkcja zwraca zasób połączenia po poprawnym połączeniu z bazą danych lub wartość false, jeśli połączenie nie powiodło się. Kilkukrotne wywołanie funkcji z tymi samymi parametrami zwraca to samo połączenie, jeśli nie zostało ono wcześniej przerwane. Połączenie trwa dłużej niż wykonywanie pojedynczego skryptu, ale na końcu każdego skryptu niezatwierdzone transakcje zostają wycofane. Funkcja przyjmuje tych samych pięć parametrów, co funkcja oci_connect(). Ich znaczenie również jest identyczne. Składnia funkcji: resource oci_pconnect(string nazwa_użytkownika, string hasło [, string nazwa_bazy [, string kodowanie_znaków [, string tryb_sesji]]]) Po przedstawieniu rodzajów połączeń możemy rozpocząć przykłady. Zgodnie z wcześniejszymi wyjaśnieniami uruchom skrypty create_user.sql i create_signon_trigger.sql, by stworzyć odpo- wiednie środowisko dla skryptów w bazie danych. Dokładniejszy opis tych skryptów znajduje się w dodatku J. Rozdział 13. ♦ Zapytania i transakcje w Oracle SQL 333 Program OracleStandardConnection.php spróbuje połączyć się z bazą danych. Jeśli połączenie będzie udane, program wyświetli stosowną informację. W przeciwnym przypadku wyświetli tablicę błędów wygenerowaną przez funkcję oci_error(). -- Przedstawiony kod znajduje się w pliku OracleStandardConnection.php, na dołączonej płycie CD-ROM. ?php // Spróbuj połączyć się z bazą danych, używając podanego loginu i hasła oraz aliasu TNS. if ($c = @oci_connect( php , php , xe )) { // Wyświetl komunikat o udanym połączeniu. echo Udane połączenie z bazą danych Oracle. br / ; // Rozłącz się. oci_close($c); } else { // Pobierz informacje o błędzie połączenia. $errorMessage = oci_error(); // Otwórz tabelę HTML. print table border= 1 cellpadding= 0 cellspacing= 0 ; // Wyświetl elementy tablicy. foreach ($errorMessage as $name = $value) print tr td .$name. /td td .$value. /td /tr ; // Zamknij tabelę HTML. print /table ; } ? Wywołanie funkcji oci_connect() określa nazwę użytkownika, hasło i alias sieciowy (lub nazwę bazy danych). Należy zmodyfikować ten i wszystkie kolejne skrypty, jeśli używa się innej nazwy użytkownika, innego hasła lub innej nazwy bazy danych. Jeśli skrypt poprawnie połączy się z bazą danych, pojawi się następujący komunikat: Udane połączenie z bazą danych Oracle Można również sprawdzić, czy połączenie zostało poprawnie rozpoznane po stronie serwera bazy danych. Połącz się z bazą danych jako użytkownik administracyjny i wykonaj skrypt get_connection_results.sql, który pobiera i wyświetla dane z tabeli CONNECTION_LOG. -- Przedstawiony kod SQL znajduje się w pliku get_connection_results.sql, na dołączonej płycie CD-ROM. SELECT event_id , event_user_name , event_type , TO_CHAR(event_date, DD-MON-YYYY HH24:MI:SS ) time FROM system.connection_log; Oczywiście, prezentowane daty będą różniły się od tych przedstawianych poniżej. Uzyskanych wyników również może być więcej — wszystko zależy od liczby przeprowadzanych prób. Ogólny wynik powinien odpowiadać poniższemu: 334 Część IV ♦ Aplikacje internetowe wykorzystujące bazę danych Oracle Express EVENT_ID EVENT_USER_NAME EVENT_TYPE TIME -------- --------------- ---------- ----------------------------- 45 PHP CONNECT 23-CZE-2007 09:52:06 46 PHP DISCONNECT 23-CZE-2007 09:52:06 Wyniki dobitnie pokazują, że skrypt OracleStandardConnection.php połączył się z bazą danych, by po chwili znowu się rozłączyć. Aby przekonać się, jak wygląda zgłoszenie informacji o błędzie, można chwilowo wyłączyć proces nasłuchujący połączeń w sposób opisany w dodatku G. Po wyłączeniu nasłuchiwania połączeń i uruchomieniu skryptu pojawi się w przeglądarce nastę- pujący tekst: code 12541 message ORA-12541: TNS:no listener offset 0 sqltext Błąd ORA-12541 informuje, że bibliotece nie udało się uzyskać połączenia z procesem nasłu- chującym. Numer linii i fragment polecenia SQL nie są w tym przypadku pomocne, ponieważ błąd wystąpił na etapie połączenia, a nie na etapie wykonywania konkretnych poleceń. W apli- kacji produkcyjnej warto zapamiętać przynajmniej treść elementu message po wykryciu błędu, bo dostarcza on największą liczbę informacji na temat tego, co było przyczyną niepowodzenia. Program OracleNewConnection.php ilustruje, że można uzyskać dwa połączenia do bazy danych Oracle w obrębie jednego skryptu PHP. Funkcja oci_connect() wykonuje pierwsze połączenie, a funkcja oci_new_connect() drugie. Choć oba połączenia zostałyby niejawnie zamknięte po zakończeniu skryptu, kod zamyka je jawnie, wywołując funkcję oci_close(). Kod tego programu jest przedstawiony poniżej. -- Przedstawiony kod znajduje się w pliku OracleNewConnection.php, na dołączonej płycie CD-ROM. ?php // Spróbuj połączyć się z bazą danych, używając podanego loginu i hasła oraz aliasu TNS. if ($c = @oci_connect( php , php , xe )) { // Wyświetl komunikat o udanym połączeniu. echo Udane połączenie z bazą danych Oracle. br / ; // Opóźnij wykonanie drugiego połączenia o 5 sekund. if (sleep(5)); if ($c2 = oci_new_connect( php , php , xe )) { // Wyświetl komunikat, jeśli połączenie było udane. echo Udane dodatkowe połączenie z bazą danych Oracle. br / ; // Zamknij dodatkowe połączenie. oci_close($c2); } else { // Pobierz informację o błędzie połączenia. $errorMessage = oci_error(); print $errorMessage[ message ]; } Rozdział 13. ♦ Zapytania i transakcje w Oracle SQL 335 // Opóźnij wykonanie drugiego zamknięcia o 5 sekund. if (sleep(5)); // Zamknij połączenie. oci_close($c1); } else { // Pobierz informację o błędzie połączenia. $errorMessage = oci_error(); print $errorMessage[ message ]; } ? Skrypt generuje następujący wynik, jeśli nie napotkał żadnych błędów: Udane połączenie z bazą danych Oracle. Udane dodatkowe połączenie z bazą danych Oracle. Skrypt używa funkcji sleep() do uzyskania opóźnień między połączeniami. Dzięki temu widać różnicę w czasie wykonywania poszczególnych działań po uruchomieniu skryptu get_connection_ results.sql. Pamiętaj, że czas i identyfikatory zależą od liczby wcześniej wykonywanych prób połączeń. EVENT_ID EVENT_USER_NAME EVENT_TYPE TIME -------- --------------- ---------- ----------------------------- 47 PHP CONNECT 23-CZE-2007 09:55:06 48 PHP CONNECT 23-CZE-2007 09:55:12 49 PHP DISCONNECT 23-CZE-2007 09:55:12 50 PHP DISCONNECT 23-CZE-2007 09:55:18 Po zapoznaniu się z kodem wykonującym połączenia pojedyncze i połączenia wielokrotne przejdźmy do kodu tworzącego połączenia trwałe. Połączenie trwałe pozostaje otwarte aż do momentu wykonania innego połączenia lub przekroczenia czasu bezczynności połączenia. W ten sposób wszystkie informacje statusowe pozostają zapamiętane między uruchomieniami skryptu, a sam proces odczytu danych z bazy nie staje się szybszy (nie trzeba zestawiać nowego połą- czenia). Aby zademonstrować działanie połączeń trwałych od strony bazy danych, potrzebujemy dodat- kowego kodu SQL i PL/SQL. Aby dokładniej zrozumieć wykonywane przez ten kod operacje, warto wcześniej przeczytać dodatki H i I. Niniejszy podrozdział wykorzystuje również zmienne dowiązane, szczegółowo opisywane w dalszej części tego rozdziału oraz w rozdziale 14. Oracle udostępnia pakiet DBMS_APPLICATION_INFO, który umożliwia zapis i odczyt danych z kolumny CLIENT_INFO widoku V$SESSION. Procedura SET_CLIENT_INFO umożliwia zapisanie informacji, która pozostaje taka sama przez całą sesję. Sesja to czas od połączenia z bazą danych do momentu rozłączenia. Przed ustawieniem wartości procedurą SET_CLIENT_INFO kolumna zawiera wartość null. Po ustawieniu kolumny jej wartość odczytuje się procedurą READ_ CLIENT_INFO. Skrypt create_session_structures.sql tworzy tabelę SESSION_LOG i pakiet SESSION_MANAGER. Pakiety bazodanowe przypominają pliki biblioteczne języka PHP. Język PL/SQL obsługuje dwa rodzaje zestawów operacji: funkcje i procedury. Funkcje zwracają wartość i mogą zostać użyte w instrukcji SQL lub jako prawa część operatora przypisania. Procedury nie zwracają 336 Część IV ♦ Aplikacje internetowe wykorzystujące bazę danych Oracle Express wartości w tradycyjnym pojęciu i dodatkowo obsługują przekazywanie parametrów przez referencję. Przekazywanie przez referencję przypomina ten sam mechanizm z języka PHP (patrz rozdział 7.), tyle że w PHP włączamy go, umieszczając przed nazwą parametru symbol ampersand. Procedury PL/SQL nie mogą być wykorzystane po prawej stronie operacji przy- pisania. Skrypt create_session_structures.sql tworzy tabelę i sekwencję. Sekwencja umożliwia auto- matyczną numerację wierszy tabeli. -- Przedstawiony kod SQL znajduje się w pliku create_session_structures.sql, na dołączonej płycie CD-ROM. CREATE TABLE session_log ( session_id NUMBER , session_activity VARCHAR2(3) , session_name VARCHAR2(64) , session_date DATE); CREATE SEQUENCE session_log_s1; Podprocedury jako czarne skrzynki Istnieją trzy sposoby pisania podprocedur nazywane funkcjami, procedurami i metodami. (cid:141) Klasyczna funkcja przekazująca parametry przez wartość operuje na kopiach danych przekazywanych przez użytkownika. Parametry to zmienne o zasięgu lokalnym. Funkcja zwraca tylko jedną wartość skalarną lub złożoną. Zmienna złożona to często po prostu adres w pamięci powiązany z tablicą danych. Ten sposób działania odpowiada funkcjom PL/SQL i jednemu z dwóch stylów tworzenia funkcji w PHP. (cid:141) Klasyczna funkcja przekazująca parametry przez referencję może działać w trybie tylko do odczytu lub w trybie odczytu i zapisu. Poszczególne parametry są przekazywane przez referencję, co oznacza, że nie powstaje ich kopia, a funkcja może zmienić ich oryginalną zawartość. Oznacza to, że funkcje tego typu mogą zwracać wartości w dwojaki sposób: jako wynik swego działania lub jako modyfikację zawartości parametrów do nich przekazanych. Zastosowanie typu void jako zwracanej wartości powoduje, że funkcja może przekazywać wartości tylko dzięki zmianom zawartości parametrów. Choć klasyczne przekazywanie przez referencję działa w języku PHP, nie jest dostępne w funkcjach PL/SQL. (cid:141) Klasyczna procedura jest nieco zmodyfikowaną wersją funkcji przekazującej parametry przez referencję, ponieważ nie może jawnie zwracać wartości. W większości sytuacji liczy się efekt działania procedury, a nie zwracane przez nią wartości. Warto jednak pamiętać, że procedura może zwracać wartości, tyle że musi w tym celu użyć parametrów. Klasyczna procedura to jedyny model przekazywania danych przez referencję obsługiwany przez bibliotekę OCI8. Skrypt tworzy pakiet z dwoma procedurami otaczającymi procedury DBMS_APPLICATION_INFO. Procedury umożliwiają sprawdzenie, czy połączenia trwałe działają zgodnie z oczekiwaniami. -- Przedstawiony kod SQL znajduje się w pliku create_session_structures.sql, na dołączonej płycie CD-ROM. CREATE OR REPLACE PACKAGE session_manager IS PROCEDURE set_session (session_name IN VARCHAR2); PROCEDURE get_session (session_name IN OUT VARCHAR2); END session_manager; / CREATE OR REPLACE PACKAGE BODY session_manager IS Rozdział 13. ♦ Zapytania i transakcje w Oracle SQL 337 PROCEDURE set_session (session_name IN VARCHAR2) IS BEGIN -- Ustaw kolumnę V$SESSION.CLIENT_INFO dla sesji. dbms_application_info.set_client_info(session_name); -- Zapamiętaj aktywność. INSERT INTO session_log VALUES ( session_log_s1.nextval , SET , session_name , SYSDATE ); COMMIT; END set_session; PROCEDURE get_session (session_name IN OUT VARCHAR2) IS BEGIN dbms_application_info.read_client_info(session_name); -- Warunkowo odczytaj wartość. IF session_name IS NOT NULL THEN -- Zapamiętaj aktywność. INSERT INTO session_log VALUES ( session_log_s1.nextval , GET , session_name , SYSDATE ); COMMIT; END IF; END get_session; END session_manager; Program OraclePersistentConnection.php wykorzystuje kilka funkcji i rozwiązań opisywanych dokładniej w dalszej części rozdziału. Program współdzieli jedno połączenie bazodanowe między dwa wykonania poleceń, które przekazują zmienną dowiązaną między skryptem PHP i bazą danych. Zmienne dowiązane stanowią tymczasowe zastępniki dla rzeczywistych wartości. Dzięki nim w programie PHP bardzo łatwo przekazać zawartość zmiennej PHP do zmiennej Oracle i na odwrót. Przed uruchomieniem programu nie istnieje trwałe połączenie bazodanowe. Program tworzy nowe połączenie, zapisuje dane do sesji i potwierdza wykonanie tego zadania, zapisując infor- mację o stanie do tabeli SESSION_LOG. Ponownie uruchomienie programu wykorzysta istniejące połączenie bazodanowe, odczyta wartość z poziomu sesji i zapisze ją do tabeli SESSION_LOG. Program OraclePersistentConnection.php ilustruje tworzenie i wykorzystywanie trwałego połączenia do bazy danych Oracle. Pamiętaj o tym, by wcześniej poprawnie ustawić wszystkie potrzebne dyrektywy z plików php.ini i httpd.conf; dotyczy to również dyrektywy KeepAlive, której wartość nie powinna być większa niż kilkanaście sekund. W przeciwnym razie zna- cząco wzrasta prawdopodobieństwo ataku typu DOS (Denial Of Service). Kod programu OraclePersistentConnection.php jest następujący: -- Przedstawiony kod znajduje się w pliku OraclePersistentConnection.php, na dołączonej płycie CD-ROM. ?php // Spróbuj połączyć się z bazą danych, używając podanego loginu i hasła oraz aliasu TNS. if ($c = @oci_pconnect( php , php , xe )) 338 Część IV ♦ Aplikacje internetowe wykorzystujące bazę danych Oracle Express { // Ustaw zmienną śledzenia sesji. $session_name_in = Sesja z [ .date( d-M-y H:i:s ). ] ; $session_name_out = ; // Polecenia SQL. $stmt1 = BEGIN session_manager.get_session(:s_name); END; ; $stmt2 = BEGIN session_manager.set_session(:s_name); END; ; // Przetwórz polecenia. $s1 = oci_parse($c,$stmt1); $s2 = oci_parse($c,$stmt2); // Dołącz zmienną $s1 w trybie IN/OUT, a zmienną $s2 w trybie IN. oci_bind_by_name($s1, :s_name
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Oracle Database 10g Express Edition. Tworzenie aplikacji internetowych w PHP
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: