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