Współpraca PHP z serwerem baz danych
Transkrypt
Współpraca PHP z serwerem baz danych
Współpraca PHP z serwerem baz danych Współpraca PHP z serwerem baz danych 1. Internetowe bazy danych 1.1. Podstawowe pojęcia baz danych 2. Instalacja MySQL 3.23.52 pod Windows 2.1. Konfiguracja systemu Windows 2.2. Instalacja MySQL 3.23.52 2.3. Instalacja sterowników ODBC dla MySQL 2.4. Test działania PHP 3. Korzystanie z serwera MySQL z poziomu języka PHP 3.1. MySQL — wprowadzenie 4. Przykładowa aplikacja internetowej bazy danych Bibliografia do kursu 1 Współpraca PHP z serwerem baz danych 1. Internetowe bazy danych 1.1. Podstawowe pojęcia baz danych Dotarliśmy do miejsca, w którym czas zająć się połączeniem technologii aplikacji internetowych, jakim niewątpliwie jest PHP, z technologią serwera baz danych. Dzięki takiemu połączeniu będzie można bez ograniczeń tworzyć zaawansowane serwisy internetowe, takie jak: sklepy i wypożyczalnie internetowe, systemy list dyskusyjnych, programy wspomagania zarządzania i wiele innych. Celem tego kursu nie jest zaprezentowanie pełnego wykładu z baz danych. To zadanie zupełnie innego przedmiotu. Dla przypomnienia podstawowych informacji przypomnijmy jedynie fundamentalne pojęcia. Baza danych jest to uporządkowany zbiór danych wraz z zespołem programów nim zarządzających. Ma strukturę przystosowaną do przechowywania, wyszukiwania, zmieniania i przetwarzania tych danych. (Encyklopedia Multimedialna PWN). Termin baza danych jest bardzo obszerny i obejmuje wiele zbiorów danych. Bazą danych może być nazwany każdy obiekt, w którym zgromadzone są jakieś informacje, może to być np. książka telefoniczna, spis książek w bibliotece lub skomplikowany zestaw narzędzi, służący do obsługi dużej ilości informacji. Relacja W relacyjnym modelu danych relacja jest podstawową strukturą służącą do przechowywania danych. Każdy wiersz w relacji jest nazywany krotką lub rekordem. Krotki mają taką samą strukturę, ale różne wartości. Każda kolumna krotki nazywana jest jej atrybutem. Na przecięciu każdej kolumny oraz wiersza znajduje się pole, które posiada odpowiednią wartość. Każda relacja posiada następujące własności: ⎯ krotki (wiersze) są unikatowe, ⎯ atrybuty (kolumny) są unikatowe, ⎯ kolejność krotek jest bez znaczenia, ⎯ kolejność atrybutów jest bez znaczenia. 2 Współpraca PHP z serwerem baz danych PESEL 80071475853 70011092633 44101138443 55121247837 66081552315 Krotka Imię Tomasz Andrzej Barbara Damian Małgorzata Wartość pola Atrybut Nazwisko Karasiński Manicki Bibicka Albinos Jędrzejek Informacje kontaktowe Przedmioty Wykładowcy Kierunek Rysunek 1. Poszczególne elementy relacji Model danych Model danych nazywany także architekturą systemu baz danych jest to zbiór ogólnych zasad posługiwania się danymi. Zbiór ten obejmuje trzy główne części: ⎯ definicję danych — to zbiór zasad określający strukturę danych, ⎯ operowanie danymi — to zbiór reguł opisujących proces dostępu do danych, ⎯ integralność danych — to zbiór reguł określający, które operacje bazy danych są dozwolone. W skład modelu danych wchodzą takie obiekty, jak encje, atrybuty, domeny i powiązania. Encja jest to miejsce, w którym gromadzone są informacje jednego typu (np.: informacje o studentach w jednej encji, a o wykładowcach w drugiej). Encja jest tym samym, co relacja. Odpowiednikiem encji w bazie danych jest tabela. Atrybut jest to własność encji, czyli to, co ją opisuje (np.: dla encji, w której znajdują się informacje o studentach własnością jest imię, nazwisko itd.). Odpowiednikiem atrybutu w bazie danych jest pole tabeli. Domena jest to rodzaj wszystkich możliwych wartości danych, jakie może przyjmować atrybut. Domena jest pojęciem podobnym do typów danych, jednak dokładniej opisującym typ danych (np.: dla atrybutu data domeną będą wszystkie daty, ale tylko w określonym formacie). 3 Współpraca PHP z serwerem baz danych Klucz główny jest to atrybut lub zbiór atrybutów (klucz złożony), który jednoznacznie identyfikuje daną relację (encję). Np.: dla relacji Studenci kluczem głównym może być numer indeksu, dzięki któremu można określić dane każdego studenta. Klucz obcy jest to jedna lub kilka kolumn, które odwołują się do kolumny lub kolumn klucza głównego w innej tabeli. Dzięki takiemu połączeniu możliwe jest tworzenie powiązań między encjami, co jest podstawą modelu relacyjnego. Powiązania są to związki służące do łączenia encji (tabel) ze sobą, czyli stworzenia między nimi relacji. Do tworzenia powiązań służą dopasowane w polach kluczowych dane, zwykle są to pola o tej samej nazwie w obu tabelach. Przeważnie dopasowane pola to tak zwany klucz podstawowy z jednej tabeli z unikatową wartością dla każdego rekordu, oraz tak zwany klucz obcy w drugiej tabeli. Powiązania stanowią bardzo ważny element relacyjnego modelu bazy danych, ponieważ umożliwiają one wprowadzenie integralności i tym samym eliminują powtarzające się dane. Każdemu powiązaniu między dwoma tabelami możemy przyporządkować konkretny typ. Istnieją trzy typy powiązań: ⎯ jeden–do–jednego, ⎯ jeden–do–wielu, ⎯ wiele–do–wielu. Powiązanie jeden–do–jednego W powiązaniu jeden–do–jednego każdy wiersz w pierwszej tabeli może mieć tylko jeden dopasowany wiersz z drugiej tabeli i tak samo każdy wiersz w drugiej tabeli może być powiązany jedynie z jednym wierszem z pierwszej tabeli. Powiązanie tego typu spotyka się bardzo rzadko, ponieważ dane powiązane w ten sposób można przeważnie umieścić w jednej tabeli. Powiązania jeden–do–jednego używa się przeważnie do odizolowania pól ze zbyt długiej tabeli, ze względu na bezpieczeństwo danych. Przykładem powiązania jeden–do–jednego jest to, że jeden student może otrzymać jedną ocenę z testu: Wyniki test Studenci Nr indeksu Id oceny Imię Ocena Nazwisko Id oceny Rysunek 2. Przykład powiązania jeden–do–jednego 4 Współpraca PHP z serwerem baz danych Powiązanie jeden–do–wielu Powiązanie jeden–do–wielu istnieje, gdy wiersz w pierwszej tabeli ma jeden lub więcej odpowiadających sobie wierszy w drugiej tabeli i odwrotnie — gdy pojedynczemu wierszowi z drugiej tabeli odpowiada jedynie jeden wiersz z pierwszej tabeli. Powiązania jeden–do–wielu są najważniejszym oraz najczęściej stosowanym typem związków, ponieważ umożliwiają one wyeliminowanie powtarzających się danych. Przykładem powiązania jeden–do–wielu może być to, że jeden student uczęszcza na zajęcia z wielu przedmiotów. Przedmioty Studenci Nr indeksu Id przedmiotu Imię Nazwa przedmiotu Nazwisko Id przedmiotu Rysunek 3. Przykład powiązania jeden–do–wielu Powiązanie wiele–do–wielu Powiązanie wiele–do–wielu istnieje, gdy jeden wiersz pierwszej tabeli posiada wiele dopasowanych wierszy z drugiej tabeli i tak samo wiersz z drugiej tabeli może mieć przyporządkowane wiele wierszy z pierwszej tabeli. Powiązanie wiele–do–wielu jest w rzeczywistości dwoma powiązaniami jeden–do–wielu. Stworzenie tego typu powiązania jest możliwe jedynie przez stworzenie trzeciej tabeli łączącej, której klucz główny jest złożony z dwóch kluczy obcych z pierwszej i drugiej tabeli. Przykładem powiązania wiele–do–wielu jest to, że jeden wykładowca może wykładać wiele przedmiotów i pracować w wielu szkołach: Wykładowcy Przedmioty Przedmioty Id przedmiotu Id wykładowcy Nazwa przedmiotu Imię Id wykładowcy Nazwisko Szkoły Id szkoły Nazwa szkoły Id wykładowcy Rysunek 4. Przykład powiązania wiele–do–wielu 5 Współpraca PHP z serwerem baz danych Model relacyjny Pod koniec lat sześćdziesiątych dr E. F. Codd, badacz zatrudniony przez firmę IBM — z wykształcenia matematyk — pracował nad nowymi sposobami obsługi dużych ilości informacji. Zniechęcony istniejącymi modelami baz danych zauważył, że zastosowanie struktur i procesów matematycznych w zarządzaniu danymi mogłoby rozwiązać wiele problemów występujących w ówczesnych modelach. W lipcu 1970 r. Codd opublikował książkę zatytułowaną Relacyjny model logiczny dla dużych banków danych. W pracy tej po raz pierwszy zaprezentował założenia relacyjnego modelu baz danych (RMBD), oparłszy go na teorii mnogości i rachunku predykatów pierwszego rzędu. RMBD zawdzięcza więc swoją nazwę pojęciu relacji w teorii mnogości. W RMBD dane przechowuje się w domenach, czyli tabelach (relacjach). Każda tabela składa się z wierszy (krotek, rekordów) oraz kolumn (atrybutów). Na przecięciu każdej kolumny z każdym wierszem występuje określona wartość (pole), która posiada unikatowy typ. Baza danych w RMBD składa się ze zbioru relacji, które posiadają następujące własności: 1. Każda relacja w bazie danych jest jednoznacznie określona przez swoją nazwę. 2. Każda kolumna w relacji ma jednoznaczną nazwę. 3. Kolumny relacji tworzą nieuporządkowany zbiór. 4. Wszystkie wartości w danej kolumnie muszą być tego samego typu. 5. Wiersze relacji tworzą nieuporządkowany zbiór w szczególności, nie ma powtarzających się wierszy. 6. Każde pole zawiera unikatową wartość (wartość atomową), która jest zgodna z wartością określoną przez kolumnę. 7. Każda relacja zawiera klucz główny czyli kolumnę lub kolumny, której wartości jednoznacznie określają wiersz ,a więc nie powtarzają się. Wartością klucza głównego nie może być wartość pusta (NULL). Do połączenia ze sobą danych przechowywanych w różnych tabelach używa się kluczy obcych. Klucz obcy to kolumna lub grupa kolumn tabeli o wartościach takich samych jak klucz główny tabeli z nią powiązanej. Takie połączenie dwóch tabel nazywa się relacją logiczną. Fakt stanowiący, że każda wartość klucza obcego musi odpowiadać jednej z istniejących wartości klucza głównego nazywa się integralnością referencyjną. 6 Współpraca PHP z serwerem baz danych Informacje Informacje kontaktowe Studenci Informacje Informacje Rysunek 5. Wprowadzenie przez dra Codda relacji oraz zasad ich definiowania i stosowania spowodowało, że relacyjny model logiczny posiada wiele zalet, których nie posiadały wykorzystywane wcześniej modele. Do zalet tych należą: 1. Integralność danych — integralność zapewnia dokładność wprowadzanych danych przez wprowadzenie dla każdego pola tabeli wartości unikatowej. Integralność uniemożliwia także powtarzanie się tego samego wiersza wchodzącego w skład klucza głównego tabeli. Reguły integralności kontrolują również poprawność wprowadzonych powiązań między tabelami. 2. Niezależność od aplikacji obsługujących bazę danych — zmiany wprowadzane przez użytkownika do projektu bazy danych oraz modyfikacje sposobów obsługi bazy danych przez oprogramowanie mają mały wpływ na działanie modelu danych. 3. Łatwy dostęp do danych — łatwy dostęp umożliwia w prosty sposób odczytanie danych z jednej tabeli oraz z wielu tabel naraz. Te i szereg innych zalet spowodowały, że RMBD wyparł wszystkie poprzednie modele danych i jest on najczęściej używany do projektowania baz danych wykorzystywanych do najróżniejszych celów. Normalizacja Normalizacja bazy danych jest to zbiór reguł służących do porządkowania danych. Normalizacja jest pierwszym i podstawowym krokiem w projektowaniu relacyjnego modelu bazy danych. Głównymi zadaniami tej fazy projektowania jest zapewnienie bazie danych zdolności do uzyskanie odpowiedzi na każde zapytanie oraz wyeliminowanie tak zwanej redundancji i problemów związanych z tym zjawiskiem. Występuje ono, gdy dane zgromadzone w tabelach (relacjach) powtarzają się. 7 Współpraca PHP z serwerem baz danych Przykładem złego zaprojektowania relacji zawierającej redundantne dane może być tabela Wykładowcy, zawierająca kolumnę Nazwa Uczelni z zawierającą powtarzające się wiersze: ID wykładowcy Imię Nazwisko Adres Nr mieszkania Nazwa Uczelni 3 4 26 27 Antoni Tomasz Karasiński Manicki Błotna 17 Narutowicza 120 28 29 30 Jarosław Grzegorz Dawid Banicki Albinos Walczak 52 Dumna 33 Mieszka I 63 41 Oliwkowa 12 12 PŁ UW WSHE 31 Waldemar Dobrowolski Scaleniowa 9 9 WSI 32 Andrzej Jędrzejek Słupska 2 WSHE PŁ 36 WSI Rysunek 6. Tabela pokazująca zjawisko redundancji W tym przypadku redundancję można wyeliminować przez umieszczenie nazw uczelni w osobnej tabeli i powiązanie jej poprzez klucz obcy z tabelą Wykładowcy. Innym niepożądanym zjawiskiem, które może zostać wyeliminowane dzięki wprowadzeniu reguł normalizacji jest otrzymanie niepoprawnych danych lub niemożność ich uzyskania. Przykładem tego może być umieszczenie wszystkich informacji o adresie wykładowcy w jednej kolumnie. Takie zaprojektowanie relacji może utrudnić uzyskanie danych np.: o numerze mieszkania lub spowodować uzyskanie błędnych informacji w przypadku, gdy ten numer nie istnieje. Rozwiązaniem tego problemu może być rozdzielenie poszczególnych części adresu i umieszczenie ich w odrębnych kolumnach. ID wykładowcy Imię Nazwisko Adres 29 Albinos Walczak Dobrowolski Jędrzejek Mieszka I 63/41 30 31 32 Grzegorz Dawid Waldemar Andrzej Oliwkowa 12/12 Scaleniowa 9/9 Słupska 2/36 Rysunek 7. Tabela zawierająca błędnie zaprojektowany adres wykładowcy 8 Współpraca PHP z serwerem baz danych Zastosowanie postaci normalizacji w danym modelu danych nie gwarantuje do końca jego optymalnego działania, czyli tego, że będzie on udzielał poprawnych odpowiedzi na zadawane pytania oraz że będzie działał szybko i poprawnie. Jeśli jednak model danych jest znormalizowany, znaczy to, że jest zgodny z regułami struktury relacyjnej i istnieje duża szansa, że będzie to efektywny i wydajny model. Pierwsza postać normalna Reguła mówi, że relacja jest w pierwszej postaci normalnej, gdy domeny zdefiniowane dla jej atrybutów są skalarne, czyli każda kolumna relacji posiada pojedyncze wartości określonego typu, a nie zbiory wartości. Przykładową relacją utworzoną zgodnie z pierwszą postacią normalną może być tabela Studenci zawierająca takie pola, jak Id studenta, Imię, Nazwisko, Data urodzenia, Adres, Nr domu. ID studenta Imię 236 237 238 Nazwisko Damian Karasiński Małgorzata Jędrzejek Tomasz Manicki Adres Nr domu Bilardowa 10 46 Jadwigi 133 74 Pogodna 33 2 Rysunek 8. Tabela znajdująca się w pierwszej postaci normalnej Jedyną wątpliwość może budzić atrybut Data urodzenia składający się z trzech części, co może uniemożliwić wyszukiwanie danych w przypadku poszukiwania np.: studenta urodzonego w danym dniu, bez względu na miesiąc i rok urodzenia. Jednak większość nowoczesnych SZBD posiada zaawansowane mechanizmy obsługi dat i czasu, co likwiduje ten problem. Druga postać normalna Dana relacja jest w drugiej postaci normalnej, jeżeli jest w pierwszej postaci normalnej i wszystkie jej atrybuty zależą od klucza głównego lub klucza złożonego, czyli wszystkie wartości kolumn, które znajdują się w tabeli zależą od kolumny lub kilku kolumn, zdefiniowanych jako klucz główny. 9 Współpraca PHP z serwerem baz danych Przedstawiona przykładowa relacja Przedmioty posiada klucz główny złożony z dwóch atrybutów: Id wykładowcy i Id przedmiotu. Tabela ta nie jest w drugiej postaci normalnej, ponieważ wartości w kolumnach Imię, Nazwisko, Telefon nie zależą od kolumny Id przedmiotu. ID wykładowcy ID przedmiotu Nazwa Przedmiotu Algebra Filozofia Bazy danych Podstawy inf. 6 4 10 5 332 324 326 243 Imię Nazwisko Telefon Grzegorz Waldemar Andrzej Dawid Albinos Walczak Dobrowolski Jędrzejek 6452398 6239870 6123432 6214323 Rysunek 9. Tabela błędnie zaprojektowana, nieznajdująca się w drugiej postaci normalnej Aby relacja była w drugiej postaci normalnej należy rozdzielić tabelę na dwie osobne: tabelę Wykładowcy zawierającą pola Id wykładowcy, Imię, Nazwisko, Telefon oraz tabelę Przedmioty zawierającą pola Id przedmiotu i Nazwa przedmiotu. ID przedmiotu Nazwa przedmiotu Algebra Filozofia Bazy danych Podstawy inf. 6 4 10 5 ID wykładowcy Imię 332 324 326 343 Grzegorz Waldemar Andrzej Dawid Nazwisko Telefon Albinos Walczak Dobrowolski Jędrzejek 6452398 6239870 6123432 6214323 Rysunek 10. Tabele znajdujące się w drugiej postaci normalnej Trzecia postać normalna Relacja jest w trzeciej postaci normalnej, jeżeli jest w drugiej postaci normalnej, a ponadto wszystkie atrybuty, które nie są kluczami, są niezależne od siebie. 10 Współpraca PHP z serwerem baz danych Przedstawiona relacja Studenci jest w trzeciej postaci normalnej, ponieważ żadne z pól nie jest zależne od innych znajdujących się w tej relacji. ID studenta Imię 236 237 238 Nazwisko Damian Karasiński Małgorzata Jędrzejek Tomasz Manicki Adres Nr domu Bilardowa 10 46 Jadwigi 133 74 Pogodna 33 2 Rysunek 11. Tabela znajdująca się w trzeciej postaci normalnej Pierwsze trzy postacie normalne zostały wymienione przez dra Codda i powinny być stosowane przy prawie każdym projekcie modelu bazy danych. Następne trzy — Boyce’a/Codda, czwarta i piąta — zostały stworzone później, z myślą o szczególnych przypadkach, które zdarzają się dość rzadko. Postać normalna Boyce’a/Codda Postać normalna Boyce’a/Codda jest odmianą trzeciej postaci normalnej i dotyczy relacji, które posiadają wiele kluczy głównych (klucz złożony). Aby można był zastosować postać normalną Boyce’a/Codda muszą być spełnione następujące warunki: ⎯ relacja musi mieć co najmniej dwa klucze główne, ⎯ te dwa klucze główne muszą być kluczami złożonymi, ⎯ klucze muszą mieć wspólne atrybuty. Czwarta postać normalna Czwarta postać normalna mówi, że wszystkie niezależne, powtarzające się grupy nie powinny występować w tej samej tabeli. Przykładem tabeli niebędącej w czwartej postaci normalnej może być relacja, która zawiera informacje na temat liczby semestrów na danym kierunku. 11 Współpraca PHP z serwerem baz danych ID kierunku Nazwa kierunku 6 2 8 Semestry Informatyka I, II, III, IV, V, VI, VII Pedagogika I, II, III, IV, V, VI, VII Dziennikarstwo I, II, III, IV, V, VI, VII Rysunek 12. Tabela nieznajdująca się w czwartej postaci normalnej Aby ta relacja znajdowała się w czwartej postaci normalnej, należy atrybut Semestry umieścić w osobnej tabeli. ID semestru Semestr I II III IV V VI VII 1 2 3 5 6 7 8 Rysunek 13. Doprowadzenie tabel do czwartej postaci normalnej Piąta postać normalna Piąta postać normalna jest stosowana w wyjątkowych przypadkach, gdy istnieje tak zwana zależność sprzężeń. Zależność sprzężeń występuje, gdy tabela 1 jest powiązana z tabelą 2, a tabela 2 jest powiązana z tabelą 3, zaś tabela 3 jest powiązana z tabelą 1 — w takiej sytuacji wszystkie te relacje muszą występować w tym samym wierszu. Wszystkie wyżej opisane reguły normalizacji służą głównie jednemu celowi, czyli wyeliminowaniu redundancji poprzez rozbicie relacji na mniejsze, bez utraty uzyskanych informacji. Główną zaletą takiego rozbicia jest szybsze działanie i łatwiejszy dostęp do danych zgromadzonych w bazie. 12 Współpraca PHP z serwerem baz danych Udało się jakoś przebrnąć przez krótką powtórkę informacji o bazach danych. Teraz czas zainstalować stosowne narzędzia. Na potrzeby tego kursu wybrano darmowy i bardzo popularny serwer baz danych MySQL. Pliki potrzebne do instalacji znajdują się na płycie z materiałami do kursu. 13 Współpraca PHP z serwerem baz danych 2. Instalacja MySQL 3.23.52 pod Windows Ważne: W tym dokumencie zostało przyjęte, że system Windows jest zainstalowany na dysku C:. Jeśli Twój system Windows jest zainstalowany na innym dysku, np. E:, wszędzie, gdzie zobaczysz w opisie C:, przyjmij, że jest to ta inna, odpowiednia litera, np.: "C:\mysql" => "E:\mysql" "C:\WINNT\mysql.ini" => "E:\WINNT\mysql.ini" 2.1. Konfiguracja systemu Windows 1. Upewnij się, czy system Windows zawiera wymagane składniki. Do poprawnego działania (m.in. PHP) potrzebna jest najnowsza wersja sterowników MDAC Microsoft 2. W systemie zalecane jest zainstalowanie pakietu MDAC 2.7 (Microsoft Data Access Components), wraz z poprawkami. System Windows XP zawiera domyślną wersję pakietu MDAC 2.7 i nie musisz go aktualizować. Dla pozostałych systemów zalecana jest aktualizacja. Pakiet MDAC i poprawki możesz pobrać z: http://www.microsoft.com/data/download.htm, http://download.microsoft.com/download/mdac27/Patch/Q319243/WIN98MeXP/ENUS/Q319243_MDAC27_x86.exe. 2.2. Instalacja MySQL 3.23.52 1. Bazę danych MySQL możesz pobrać z: http://www.mysql.com/. Ważne: w chwili pisania tego tekstu przetestowano dokładnie wersję MySQL pod Windows o numerze 3.23.52. Możesz oczywiście używać innej, nowszej wersji, ale wszelkie zmiany w prezentowanych skryptach będziesz musiał wykonać samodzielnie. 14 Współpraca PHP z serwerem baz danych MySQL 3.2x występuje w dwóch wersjach o różnych możliwościach. Są to pliki mysql3.23.52-win.zip (wersja standardowa) oraz mysql-max-3.23.52-win.zip (z obsługą m.in. baz Berkeley DB oraz InnoDB). Jeśli w Twoim przypadku nie ma przeciwwskazań, wybierz instalację większą — mysql-max. 2. Wybrany plik z instalacją należy rozpakować, a następnie uruchomić plik SETUP.EXE — pojawi się ekran powitalny instalatora MySQL. Kliknij Next. 3. Na początku zostaną wyświetlone dodatkowe informacje dotyczące instalacji. Warto je przejrzeć — przydadzą się niebawem. Po przeczytaniu kliknij Next. 4. Następnie będziesz musiał podać informacje dotyczące położenia plików MySQL na Twoim komputerze. Jeśli Twój system Windows jest zainstalowany na dysku C:, to od razu możesz przejść dalej klikając Next. Jeśli zaś system jest na innym dysku (np. E:), kliknij Browse i wpisz odpowiednie miejsce — tu: E:\mysql. Zatwierdź zmiany i kliknij Next. 5. W kolejnym kroku zostaniesz zapytany o rodzaj instalacji. Masz do wyboru instalację typową — Typical (która jest zalecana), instalację minimalną — Compact oraz z możliwością wyboru instalowanych składników — Custom. Po wybraniu odpowiadającej Ci opcji, kliknij Next — rozpocznie się instalacja (jeśli wybrałeś opcję Custom, będziesz jeszcze mógł wybrać składniki do zainstalowania). 6. Po zainstalowaniu wyświetli się ekran końcowy. Kliknij Finish. 7. Teraz przejdź do katalogu C:\WINDOWS (jeśli masz system Windows 95/98/Me/XP) lub do C:\WINNT (jeśli masz Windows NT/2000). Utwórz nowy plik my.ini i wpisz do niego tekst, dokładnie jak poniżej: [mysqld] basedir=C:/mysql/ datadir=C:/mysql/data/ (zauważ, że MySQL, wywodzący się ze środowiska Unix, wymaga tu podawania ścieżek z prawymi ukośnikami). 15 Współpraca PHP z serwerem baz danych Jeśli MySQL został zainstalowany w katalogu innym niż domyślny C:\mysql, to musisz odpowiednio poprawić plik konfiguracyjny my.ini (wpisując np. basedir=E:/Program Files/mysql/ oraz datadir=E:/Program Files/mysql/data/). 8. Przygotujesz teraz automatyczne uruchamianie MySQL przy starcie komputera. Odnajdź katalog C:\mysql\bin i uruchom program winmysqladmin.exe. Przy pierwszym uruchomieniu zainstaluje on w Twoim systemie usługę MySQL. Jeśli WinMySQLadmin schowa się po krótkiej chwili, nie martw się. Jest on zawsze dostępny jako mała ikonka na pasku zadań przy zegarze. Jeśli klikniesz w nią prawym przyciskiem myszy i wybierzesz opcję Show me, program pojawi się na ekranie. W celu ponownego schowania programu, kliknij prawym przyciskiem podobną ikonkę z sygnalizatorem w prawym górnym rogu i wybierz opcję Hide me. 9. Mając otwarty program WinMySQLadmin, odnajdź teraz zakładkę my.ini Setup i z lewej strony na dole odszukaj przycisk Create ShortCut on Start Menu. Naciśnij go, a wtedy w grupie Autostart (Startup w angielskiej wersji Windows) zostanie umieszczony skrót właśnie do programu WinMySQLadmin. Od tej pory przy każdym uruchomieniu komputera będziesz miał działającą w tle usługę MySQL. 10. Instalator MySQL nie dodaje niestety skrótów do Menu Start. Jeśli chcesz, możesz utworzyć je samodzielnie. Polecane pliki, do których warto mieć skróty, to: C:\mysql\bin\winmysqladmin.exe — administrator MySQL, C:\mysql\bin\MySqlManager.exe — graficzny menedżer MySQL, C:\mysql\bin\mysql.exe — interpreter poleceń SQL, C:\mysql\Docs\manual_toc.html — spis treści dokumentacji. 2.3. Instalacja sterowników ODBC dla MySQL 1. Jeśli będziesz potrzebował dostawać się do danych z MySQL poprzez ODBC (Open DataBase Connectivity), zainstaluj po prostu odpowiedni sterownik ODBC. 16 Współpraca PHP z serwerem baz danych Masz do wyboru dwie wersje tego sterownika: produkcyjną 2.50 oraz rozwojową 3.51 (te numery będą się oczywiście zmieniać w miarę upływu czasu). Jeśli nie wiesz, który sterownik wybrać, spróbuj najpierw nowszej wersji. 2. W chwili pisania tego tekstu ostatnią wersją rozwojową sterownika ODBC dla MySQL była wersja 3.51.03. Plik instalacyjny możesz pobrać z: http://www.mysql.com/downloads/api-myodbc-3.51.html 3. Uruchom ściągnięty plik MyODBC-3.51.03.exe — pojawi się ekran instalatora. Po trzykrotnym kliknięciu Next rozpocznie się szybka instalacja, którą kończysz kliknięciem Finish. Gotowe. 4. Otwórz Panel sterowania i znajdź Narzędzia Administracyjne. Znajdziesz tam ikonę Źródła danych (ODBC). Otwiera ona panel administracyjny ODBC. W panelu tym otwórz teraz zakładkę Sterowniki i sprawdź, czy na liście zainstalowanych sterowników znajduje się MySQL ODBC 3.51 Driver. Jeśli tak jest, to wszystko w porządku — instalacja zakończona sukcesem. 2.4. Test działania PHP i MySQL 1. Uruchom monitor mysql i wpisz następujący ciąg poleceń: create database test_db; use test_db; create table osoby (id int auto_increment not null unique, imie varchar(30), nazwisko varchar(50)); insert into osoby(imie, nazwisko) values ('Adam', 'Mickiewicz'); insert into osoby(imie, nazwisko) values ('Zbigniew', 'Boniek'); insert into osoby(imie, nazwisko) values ('Jan', 'Brzechwa'); insert into osoby(imie, nazwisko) values ('Artur', 'Partyka'); insert into osoby(imie, nazwisko) values ('skasuj', 'mnie'); insert into osoby(imie, nazwisko) values ('Anna', 'Jantar'); insert into osoby(imie, nazwisko) values ('Bruce', 'Lee'); delete from osoby where (imie='skasuj' and nazwisko='mnie'); select * from osoby; exit; 17 Współpraca PHP z serwerem baz danych W ten sposób zostanie założona baza 'test_db', w której będzie wypełniona danymi tabela 'osoby'. 2. Załóż nowy plik i wpisz dokładnie poniższy tekst: <html> <head> <title>Odczyt danych z MySQL</title> </head> <body> <?php $conn = mysql_connect("localhost", "", ""); if ($conn) { $db = mysql_select_db("test_db"); } if (!$conn) { echo "Problem z połączeniem do bazy danych!"; } else if (!$db) { echo "Problem z odczytaniem bazy danych!"; } else { ?> <table border="1" cellpadding="7"> <tr> <td>id</td> <td>imie</td> <td>nazwisko</td> </tr> <?php $result = mysql_query("select * from osoby"); if ($result) { while ($line = mysql_fetch_array($result)) { echo "<tr>\n"; echo " <td>" . $line['id'] . "</td>\n"; echo " <td>" . $line['imie'] . "</td>\n"; echo " <td>" . $line['nazwisko'] . "</td>\n"; echo "</tr>\n"; } } mysql_close($conn); } ?> 18 Współpraca PHP z serwerem baz danych </body> </html> Zapisz plik pod nazwą test_db.php w katalogu głównym serwera WWW (katalog C:\Apache\htdocs lub podobny). 3. Upewnij się, że są włączone serwery: MySQL oraz Apache. 4. Uruchom przeglądarkę i wpisz w pasku adresu: http://localhost/test_db.php Powinieneś zobaczyć stronę jak poniżej: Jeśli tak faktycznie jest, to wszystko wykonałeś poprawnie. 19 Współpraca PHP z serwerem baz danych 3. Korzystanie z serwera MySQL z poziomu języka PHP 3.1. MySQL — wprowadzenie Serwer baz danych został zainstalowany. Teraz zobaczymy, jak korzystać z baz danych tego serwera za pomocą skryptów PHP. UWAGA: celem tego kursu nie jest przekazanie kompletu wiadomości na temat języka SQL i sposobu jego wykorzystania. Takie wiadomości można znaleźć w innych kursach Polskiego Uniwersytetu Wirtualnego. Możesz również uzupełnić wiedzę na podstawie literatury. W tym rozdziale zaprezentuję absolutne podstawy posługiwania się poleceniami MySQL. Ważne: serwer MySQL jest autonomicznym oprogramowaniem, działającym podobnie jak serwer WWW na usługi aplikacji użytkowników. Jego zadaniem jest odpowiadanie na pytania klientów, dotyczące danych zawartych w bazach serwera. Podobnie jak HTTP w przypadku serwera WWW, istnieje protokół łączący aplikację z serwerem MySQL — jest to ODBC. Zanim połączymy się z serwerem MySQL za pomocą skryptu PHP, warto poćwiczyć polecenia SQL (na tym właśnie języku opiera się serwer MySQL) za pomocą tekstowego interpretera tego języka. Warto nauczyć się obsługi klienta mysql w celu stworzenia i używania prostej bazy danych. Program mysql (czasami będę używał określenia monitor) jest interaktywnym programem pozwalającym na połączenie się z serwerem MySQL, przesyłanie zapytań i oglądanie ich wyników. mysql może być używany w trybie wsadowym: zapisujesz swoje zapytania do pliku, a później każesz mysql wykonać zawarte tam polecenia. Tak przetestowane polecenie z łatwością wstawisz następnie do skryptu PHP. Aby zobaczyć listę opcji, których możesz użyć w programie mysql, wywołaj go z opcją --help Połączenie z serwerem Zazwyczaj, aby połączyć się z serwerem, będziesz musiał w czasie wywołania mysql podać nazwę użytkownika MySQL oraz, w większości wypadków, hasło. Jeśli serwer 20 Współpraca PHP z serwerem baz danych działa na innym komputerze niż ten, na którym pracujesz, będziesz musiał także podać nazwę tego komputera. mysql -h host -u user -p Enter password: ******** Znaki ******** reprezentują Twoje hasło, wprowadź je, kiedy mysql wyświetli zachętę w postaci Enter password:. Jeżeli zainstalowałeś serwer zgodnie z instrukcją, serwer nie posiada hasła. Nie jest to rozwiązanie bezpieczne. Gdy zdecydujesz się udostępnić swoją aplikację, koniecznie wprowadź hasło dostępu do serwera. Po pomyślnym połączeniu, możesz w każdej chwili się rozłączyć przez wpisanie polecenia QUIT po zachęcie mysql>. Tworzenie, modyfikacja, usuwanie baz danych i tabel w MySQL-u Utworzenie bazy danych w MySQL-u jest wyjątkowo proste. Aby wykreować bazę o nazwie baza1, należy wydać polecenie: mysql> create database baza1; Polecenie usuwające bazę danych: mysql> drop database baza1; Przedstawione poniżej polecenie create table tworzy tabelę osoby w bazie baza1. mysql> create table osoby ( -> numer int not null, -> imie varchar(30), -> nazwisko varchar(50), -> stanowisko varchar(50), -> primary key (numer) ->); Tabela osoby została utworzona z czterech pól. Pierwsze pole numer jest typu liczbowego całkowitego, następne pola imie, nazwisko i stanowisko są typu znakowego. Atrybut primary key powoduje, że numer staje się polem kluczowym, co zapewnia jego unikatowość. 21 Współpraca PHP z serwerem baz danych Za pomocą polecenia alter table można: dodać lub usunąć pole z tabeli, zmienić definicję istniejących pól, zmienić nazwę pól, a nawet nazwy tabel. Na przykład, żeby dodać pole pensja do tabeli osoby i umieścić je tuż za polem numer, należy wydać polecenie: mysql> alter table osoby add pensja int after numer; Polecenie, które usuwa pole pensja: mysql> alter table osoby drop pensja; Aby zmienić definicję pola imie, należy posłużyć się słowem kluczowym modify, tak jak poniżej: mysql> alter table osoby modify imie varchar(100); Można także zmienić nazwę pola, na przykład pole imie na pseudonim, za pomocą atrybutu change. Jest to zaprezentowane poniżej: mysql> alter table osoby change imie pseudonim varchar(30); Możliwa jest też zmiana nazwy tabeli, na przykład tabeli osoby na klienci, za pomocą atrybutu rename, tak jak poniżej: mysql> alter table osoby rename klienci; Wstawianie danych do tabeli jest możliwe dzięki poleceniu insert into. I tak na przykład polecenie: mysql> insert into osoby values( 20, 'Rafal', 'Grzybowski' 'autor'); wstawi do zdefiniowanej wcześniej tabeli osoby jeden rekord danych. Uniwersalnym poleceniem wybierania danych z serwera jest select. Aby wyświetlić wszystkie informacje z tabeli osoby, należy wpisać: 22 Współpraca PHP z serwerem baz danych mysql> select * from osoby; Oczywiście, lista poleceń SQL jest o wiele bardziej skomplikowana. Gorąco polecam odwiedzenie stron http://www.webdeveloper.pl, gdzie znajduje się pełne polskie tłumaczenie dokumentacji i samouczka MySQL. Połaczenie PHP <-> MySQL Gdy już dostatecznie opanujesz (lub przypomnisz sobie) technologie projektowania i konstrukcji baz danych SQL, możesz przejść do nauki interfejsu pomiędzy serwerem MySQL i językiem PHP. Na szczęście zestaw funkcji jest nieskomplikowany i łatwy do nauczenia. A zatem zaczynamy. Aby wykonać cokolwiek w swojej bazie, należy wysłać do niej informacje. Wszystkie informacje wysyłane są do bazy danych w postaci zapytań, do czego służy funkcja mysql_query(zapytanie). Wszystkie zapytania wysyłamy w następujący sposób: $zaptanie="twoje zapytanie"; $wykonaj=mysql_query($zapytanie); Po takiej operacji zmienna $wykonaj będzie zawierać wartość TRUE, jeśli operacja powiedzie się, jeśli nie—- zwróci wartość FALSE. Aby połączyć się z serwerem MySQL należy: mysql_connect (nazwa_hosta[:port] [, użytkownik] [,hasło]); Wszystkie parametry umieszczone w nawiasach kwadratowych są opcjonalne. W praktyce oznacza to, że wymagana jest jedynie nazwa hosta — następnie opcjonalnie możemy wpisać nazwę użytkownika oraz jego hasło. Jeśli nie podamy nazwy hosta, automatycznie nastąpi próba połączenia się z localhostem (w przypadku instalacji opisanej w tym skrypcie tak właśnie możemy zrobić). Jeśli zabraknie nazwy użytkownika, automatycznie zostaniemy zalogowani jako właściciel procesu baz danych. Nasza instalacja nie ma ustawionego hasła, więc trzeci parametr nie jest wymagany. Poniższy przykład pokazuje, jak połączyć się z serwerem dane.pl jako użytkownik rafal, z hasłem trudne: $sql = mysql_connect (dane.pl, rafal, trudne); 23 Współpraca PHP z serwerem baz danych Funkcja mysql_connect zwróci wartość TRUE, jeśli zakończy się sukcesem, jeśli nie powiedzie się — zwróci wartość FALSE. Jeśli zakończyłeś już operacje w swojej bazie, należy się rozłączyć, co wykonuje się funkcją mysql_close(id_połączenia). Aby zakończyć połączenie, które zaprezentowałem powyżej należałoby zastosować komendę 'mysql_close' w następujący sposób: mysql_close($sql); Do stworzenia nowej bazy używamy komendy mysql_create_db(nazwa), np.: mysql_create_db("zawodnicy"); Samo stworzenie bazy nie oznacza, że właśnie na niej będziemy wykonywać operacje, dlatego musimy ją wybrać, co robimy komendą mysql_select_db(nazwa), np.: mysql_select_db("studenci"); Od tej pory można już wykonywać różne operacje w bazie 'studenci'. Bazę danych możemy stworzyć także za pomocą wyrażeń SQL w formie zapytania: $zapytanie="CREATE DATABASE studenci"; $wykonaj = mysql_query($zaptanie); Gdy nasza baza jest już utworzona, możemy zacząć wprowadzać dane, najpierw jednak trzeba utworzyć tabelę. Robimy to według następującego schematu składni SQL: CREATE TABLE nazwa_tabeli (nazwa1 typ1, nazwa2 typ2, PRIMARY KEY(nazwa_x)) Postarajmy się stworzyć tabelę według danego schematu: $zapytanie = char(30), rok "CREATE TABLE char(3), lista punkty KEY(id))"; $wykonaj=mysql_query($zapytanie); 24 (id char(3), char(3) ocena NOT NULL, char(3), imie PRIMARY Współpraca PHP z serwerem baz danych Rozpatrzmy powyższy przykład: klucz oznaczony jako PRIMARY KEY oznacza, że klucz ten jest kluczem głównym, a klucz główny nie może się powtarzać — w przypadku, gdyby klucz główny się powtórzył, po prostu rekord nie zostanie dodany do tabeli. Klucz oznaczony jako NOT NULL nie może być pusty. Dostępnych jest kilka typów pól, niektóre z nich przedstawiam poniżej: char(x) — ciąg znaków o maksymalnej długości x, gdzie x nie może być większy od 255, blob — ciąg znaków o długości ograniczonej przez Twoją pamięć, integer — liczba całkowita z zakresu od–do, date — data w formacie DBMS (uwaga format odwrotny do normalnego: YYYY-MM-DD), year — rok, jeśli zostanie podany zły, jego wartość zmieni się w 0000, decimal(x, y) — liczba dziesiętna, gdzie x oznacza maksymalną liczbę cyfr, a y maksymalną liczbę cyfr po przecinku. Mamy już stworzoną tabelę, teraz trzeba coś do niej dodać. Robimy to wg następującego schematu: INSERT INTO nazwa_tabeli VALUES (wartosc_pola1, wartosc_pola2, wartosc_pola3...) Nie zawsze musimy wypełniać wszystkie pola, a robi się to w następujący sposób: INSERT INTO nazwa_tabeli (nazwa_pola1, nazwa_pola2) VALUES (wartosc_pola1, wartosc_pola2) Nadeszła teraz pora na przykład — załóżmy, że chcemy dodać do naszej tabeli nowego studenta. Operacja ta wygląda tak: $zapytanie = "INSERT INTO lista VALUES(kowalski, 3, 32, 6)"; $wykonaj=mysql_query($zapytanie); Po wykonaniu takiej operacji tabela 'lista' będzie już zawierać jeden rekord. Teraz kolejno możemy dodawać w ten sam sposób kolejne rekordy. Jeśli chcemy przeszukać naszą tabelę w poszukiwaniu jakiegoś konkretnego rekordu, robimy to za pomocą komendy SELECT według schematu: 25 Współpraca PHP z serwerem baz danych SELECT nazwa_pola FROM nazwa_tabeli WHERE warunek Oczywiście nazw pól możemy podać kilka lub wszystkie — jednak zamiast tego po prostu wstawiamy znak gwiazdki (SELECT * FROM itd.). Warunek może być bardzo złożony, ale to jest temat na kolejny artykuł. Załóżmy, że chcemy przeszukać naszą tabelę w poszukiwaniu studenta o nazwisku 'iksinski'. Robimy to w następujący sposób: $zapytanie = "SELECT imie FROM lista WHERE imie='iksinski'"; $wykonaj=mysql_query($zapytanie); Funkcja zwróci wartość TRUE, jeśli znajdzie w naszej tabeli iksinskiego, jeśli nie — zwróci FALSE. Pamiętaj jednak, że rozróżniane są wielkie i małe litery, dlatego 'Iksinski' to nie to samo co 'iksinski' czy 'IKSINSKI'. Jeśli jakiś rekord jest już nieaktualny lub po prostu źle wpisaliśmy dane, należałoby go zaktualizować, do czego służy komenda UPDATE: UPDATE nazwa_tabeli SET wartosc_pola WHERE warunek Powiedzmy, że chcemy zmienić w naszej tabeli rok, na którym studiuje kowalski. Robimy to w następujący sposób: $zapytanie = "UPDATE lista SET rok=5 WHERE imie='kowalski'"; $wykonaj=mysql_query($zapytanie); Jeśli jakieś dane z danej tabeli już nas nie interesują, pozbywamy się ich komendą DELETE, według wzorca: DELETE FROM nazwa_tabeli [WHERE warunek] W powyższym przykładzie warunek wziąłem w nawias, ponieważ jeśli nie podamy warunku z tabeli — zostaną wymazane wszystkie rekordy. W praktyce kasowanie prezentuje się następująco: $zapytanie = "DELETE FROM lista WHERE imie=kowalski"; $wykonaj=mysql_query($zapytanie); Od tej chwili kowalskiego już nie ma w naszej tabeli studentów. 26 Współpraca PHP z serwerem baz danych Jak wyświetlić wyniki przeszukiwania tabeli? Skoro poznałeś już podstawowe zagadnienia SQL'a, możemy przejść do bardziej zaawansowanych struktur — wyświetlanie wyników przeszukiwania tabeli. Wszystko odbywa się według poniższego schematu: $zapytanie = "SELECT * FROM nazwa_tabeli"; $wykonaj = mysql_query($zaptanie); while($wiersz = mysql_fetch_array($wykonaj)) { print "Pole pierwsze".$wiersz['pole1']."<br>"; print "Pole drugie".$wiersz['pole2']."<br>"; print "Pole trzecie".$wiersz['pole3']."<br>"; } Wszystko to odbywa się dzięki komendzie 'mysql_fetch_array', której zadaniem jest pobieranie wierszy ze zbioru wyników i zwracanie ich w postaci tablicy. Oczywiście każda osoba znająca HTML'a i PHP zorientowała się, że zamiast pisać 'print' trzy razy — można napisać tylko raz, ale napisałem tak dla przejrzystości kodu. To podstawy — jeżeli Cię zainteresowały — zapraszam do lektury dokumentacji. Aby opowiedzieć o wszystkim, ten skrypt musiałby mieć około tysiąca stron. 27 Współpraca PHP z serwerem baz danych 4. Przykładowa aplikacja internetowej bazy danych Na koniec zaprezentuję aplikację wykorzystującą poznane technologie. Jako przykład wybrałem aplikację wspomagającą działanie sklepu internetowego (magazyn, baza kontrahentów i fakturowanie), napisaną przez jednego ze studentów na prowadzonych przeze mnie zajęciach z internetowych baz danych. Wszystkie pliki instalacyjne, kod źródłowy i instrukcja instalacji znajdują się na płycie z materiałami w katalogu "sklep". Tekst programu został bardzo bogato ilustrowany komentarzami, a więc jego zrozumienie nie powinno stanowić problemu. Gorąco zachęcam do uruchomienia aplikacji i samodzielnego przeanalizowania jej kodu. Poniżej przedstawiam krótką analizę wybranych fragmentów kodu tego programu. Najlepszym przykładem wielokrotnego wykorzystania tej samej funkcji w programie jest nagłówek każdej zakładki oraz podokna. Funkcją wywołującą wspomniany kod jest: head($headTitle, $headContent). Celem jej jest zawarcie w kodzie HTML informacji na temat sposobu kodowania dokumentu, opisu programu oraz jego autora. Funkcje HTML’owe znajdują się w pliku HTML.php. function head($headTitle,$headContent){ echo"<head>"; echo"\n\t<title>".$headTitle."</title>"; echo"\n\t<meta http-equiv=\"content-type\"" ."content=\"text/html; charset=iso-8859-2\">"; echo"\n\t<meta name=\"description\" content=\"" .$headContent."\">"; echo"\n\t<meta name=\"author\" content=\"" ."Krzysztof Witkowski\">"; } Zmienna $headTitle określa tytuł okna w przeglądarce internetowej, znajdujący się na belce tytułowej. $headContent natomiast reprezentuję tematykę zakładki, krótki opis. Zastosowanie tej funkcji wyeliminowało zbędną redundancję kodu i spowodowało jego standaryzację, gdyż dzięki temu każda strona rozpoczyna się od takiego samego kodu. Ma to wpływ na czytelność kodu. 28 Współpraca PHP z serwerem baz danych Podobnie przedstawia się sytuacja z funkcją form, odpowiadającą za spreparowanie formularza HTML. Również i w tym przypadku jest ona bardzo często wykorzystywana. function form($formN,$formT,$formAction,$formMethod,$formOthers){ for($formNLicznik=1;$formNLicznik<=$formN;$formNLicznik++){ echo"\n"; } for($formTLicznik=1;$formTLicznik<=$formT;$formTLicznik++){ echo"\t"; } if($formAction){$formAction=" action=\"".$formAction."\"";} if($formMethod){$formMethod=" method=\"".$formMethod."\"";} if($formOthers){$formOthers=" ".$formOthers;} echo"<pre><form".$formAction.$formMethod.$formOthers.">"; } Wszystkie funkcje napisane są tak, aby po wyświetleniu źródła HTML w przeglądarce, zachowany był ład i porządek. Na to z kolei ogromny wpływ mają tabulacje i znaki nowej linii. Dlatego też znacząca większość funkcji posiada na początku listy parametrów dwie zmienne, która dbają o kosmetykę kodu HTML. W przedstawionej powyżej funkcji pierwsza nosi nazwę $formN i odpowiada za wstawianie znaku nowej linii (\n). Druga zaś, to $formT. Ta zmienna ma na celu zarządzenie tabulacjami w kodzie, tzw. wcięciami. Zmienna $formAction przenosi nazwę wywoływanego pliku, zaś $formAction, to sposób przesłania formularza (np.: GET, POST). $formOthers wykorzystywana jest bardziej sporadycznie. Służy do przekazywania opcjonalnych parametrów znacznika <form>. Zastosowane tu pętle for zajmują się wstawianiem odpowiedniej liczby tabulacji i znaków nowej linii. Interfejs programu SKLEP KOMPUTEROWY oparty jest o tabele. Zastosowanie takiego sposobu wyświetlania danych zapewnia jeden standard ich wizualizacji, bez względu na przeglądarkę internetową. Funkcją zajmującą się tworzeniem tabeli jest table. function table($tableN, $tableT, $tableBorder, $tableWidth, $tableHeight, $tableOthers){ for($tableNLicznik=1;$tableNLicznik<=$tableN; $tableNLicznik++){ echo"\n"; } 29 Współpraca PHP z serwerem baz danych for($tableTLicznik=1;$tableTLicznik<=$tableT; $tableTLicznik++){ echo"\t"; } if($tableBorder){ $tableBorder=" border=\"".$tableBorder."\""; } if($tableWidth){ $tableWidth=" width=\"".$tableWidth."\""; } if($tableHeight){ $tableHeight=" height=\"".$tableHeight."\""; } if($tableOthers){ $tableOthers=" ".$tableOthers; } echo"<table".$tableBorder.$tableWidth.$tableHeight .$tableOthers.">"; } Dwa pierwsze parametry funkcji omówione zostały przy okazji funkcji form, dlatego też nie będą precyzyjnie opisywanie. Pierwszy — $tableN służy do określenia liczby znaków nowej linii, zaś drugi — $tableT do ustawienia odpowiednio tabulatorów. $tableBorder, to nic innego, jak grubość obramowania tabeli, natomiast $tableWidth i $tableHeight określają szerokość oraz wysokość tabeli. Ostatnia zmienna nosi nazwę $tableOthers. Odpowiada za dodatkowe parametry znacznika <table>. Tabela będzie wyświetlana poprawnie, jeśli będą w niej wiersze i kolumny. Do realizacji tych czynności również przewidziane są odpowiednie funkcje. Są to tr oraz td. Pierwsza odpowiada za wstawienie znacznika <tr>, zaś druga oczywiście realizuje HTML’owy znacznik <td>. function tr($trN,$trT){ for($trNLicznik=1;$trNLicznik<=$trN; $trNLicznik++){ echo"\n"; } for($trTLicznik=1;$trTLicznik<=$trT; $trTLicznik++){ echo"\t"; } echo"<tr>"; 30 Współpraca PHP z serwerem baz danych } function td($tdN,$tdT){ for($tdNLicznik=1;$tdNLicznik<=$tdN; $tdNLicznik++){ echo"\n"; } for($tdTLicznik=1;$tdTLicznik<=$tdT; $tdTLicznik++){ echo"\t"; } echo"<td>"; } Lista parametrów dla powyższych funkcji składa się z dwóch zmiennych. Ich zadaniem jest dbanie o wygląd kodu HTML. Pierwsza zajmuje się znakami nowej linii, zaś druga wcięciami kodu programu. Wstawiony w ten sposób znacznik interpretowanego języka HTML w jego kodzie prezentuje się o wiele bardzie czytelnie, natomiast takie kosmetyczne operacje na nie mają żadnego wpływu na wygląd interfejsu programu w przeglądarce internetowej. Drobną wadą takiego rozwiązania jest fakt, że nieznacznie — wręcz niemal niezauważalnie — zwiększa się wielkość pliku ze skryptem programowym. Są to jednak symboliczne wartości, zawierające się jedynie w bajtach. Program tego typu nie mógł się obejść bez bazy danych. Odwołania są dosyć częstym zjawiskiem w programie, właściwie występują w prawie każdym module, więc również i w tym przypadku operacje takie realizowane są przez odpowiednie funkcje. Za łączenie z bazą odpowiada funkcja dbConnUp, posiadająca tylko jeden parametr. Jest nim zmienna z zakodowaną nazwą bazy, z którą PHP powinno się połączyć. function dbConnUp($dbName){ $dbLink=mysql_connect('localhost', '', '') or die("Nie można się poł±czyć."); mysql_select_db ($dbName) or die("Nie można wybrać bazy danych."); return $dbLink; } Funkcja mysql_connect służy do łączenia z odpowiednią bazą danych. Jeśli operacja takowa się nie powiedzie, zostanie wyświetlony odpowiedni komunikat o niemożności 31 Współpraca PHP z serwerem baz danych nawiązania połączenia. Po nawiązaniu połączenia, funkcja mysql_select_db dokonuje wyboru właściwej bazy danych. Na końcu zwracane jest połączenie przez zmienną $dbLink. Zapytania realizowane są przez funkcję dbResult, która wymaga podania jednego parametru. Jest nim tekstowy ciąg znaków, zawierający polecenie języka MySQL. Wynikiem działania funkcji jest tablica z pobranymi danymi z bazy. function dbResult($dbQuest){ $dbResult=mysql_query($dbQuest); return $dbResult; } Przykładowe zapytanie MySQL’owe może wyglądać następująco: $dbQuestMagazyn="SELECT magazyn FROM kontrah WHERE(nazwa_kh=\"".$changeKontrahentArray[0] ."\" AND adres_kh=\"".$changeKontrahentArray[1]."\")"; Zadaniem powyższego polecenia jest wyświetlenie wszystkich rekordów z bazy danych, znajdujących się w tabeli magazyn, które spełniają warunek określony w klauzuli WHERE. Podana w niej jednoelementowa tablica posiada dwa pola. Pierwsze w tym przypadku przechowuje nazwę kontrahenta, zaś drugie jego adres. Efektem takiego zapytania powinien być w odpowiedzi tylko jeden rekord. Zamknięcie połączenia z bazą polega na wywołaniu funkcji dbConnDown, której celem jest zwolnienie zajmowanej przez zmienne $dbResult oraz $dbLink pamięci operacyjnej. Jeśli połączenie nie będzie zerwane, to PHP kończąc wykonywanie skryptu samo to uczyni, zwalniając przy tym pamięć i zasoby konieczne do nawiązania połączenia z bazą danych. function dbConnDown($dbLink,$dbResult){ if(isset($dbResult)) mysql_free_result($dbResult); // Zwalnianie pamięci if(isset($dbLink)) mysql_close($dbLink); // Rozłącznie } Powyższe funkcje obsługi bazy danych zawarte są w pliku PHP.php, który wraz z plikiem HTML.php znajduje się w folderze function. 32 Współpraca PHP z serwerem baz danych Bibliografia 1. Atkinson L., 2004: Core PHP — programowanie, Helion, Gliwice. 2. Choi W., Kent A., Lea C., Prasad G., Ullman C., 2002: PHP4 — od podstaw, Helion, Gliwice. 3. Dubois P, 2000: MySQL, Mikom, Warszawa. 4. Ullman L., 2004: PHP i MySQL. Dynamiczne strony WWW, Helion, Gliwice. Bibliografia stron WWW 5. MySQL. Witryna internetowa. http://dev.mysql.com/doc/mysql/en/index.html, stan z 22.09.2004. 6. PHP. Witryna internetowa. http://www.php.net/docs.php, stan z 22.09.2004. 33