r09_t.pdf

(311 KB) Pobierz
Oto przyk³ady stylów nag³ówków:
Rozdział 9
Integrowanie PHP z MySQL
W niniejszym rozdziale omówimy następujące tematy:
Integrowanie bazy danych MySQL ze skryptami PHP.
Tworzenie połączeń MySQL z PHP; selekcjonowanie i tworzenie baz danych.
Uruchamianie zapytań SQL poprzez PHP.
Budowa potężnej aplikacji zarządzającej zawartością archiwum, z użyciem Flasha, PHP i MySQL.
Mając już podstawowe wiadomości na temat języka Structured Query Language, możemy przystąpić do
omawiania MySQL jako przykładu specyficznej implementacji bazy danych, wykorzystującej język SQL. W
szczególności, swoją uwagę skierujemy na współdziałanie PHP z MySQL w zakresie zachowywania i
pobierania danych dla naszych aplikacji.
Na nasze szczęście, sprzęganie MySQL z PHP przebiega bardzo podobnie do łączenia z jakimkolwiek systemem
relacyjnych baz danych. PHP wyposażono w liczne funkcje wewnętrzne, umożliwiające dostęp do
najróżniejszego typu baz danych, takich jak popularna Microsoft SQL Server czy Oracle. Oznacza to zaś, że
przekierowanie aplikacji z jednego systemu na inny jest tak samo proste, jak zmiana wywołań funkcji.
Zacznijmy od przyjrzenia się sposobom, dzięki którym możemy uzyskać dostęp i manipulować danymi
przechowywanymi w bazach MySQL, za pomocą PHP. PHP oferuje szeroki wachlarz odpowiednich funkcji, my
zaś omówimy najbardziej pożyteczne i najczęściej używane.
Na zakończenie rozdziału zbudujemy kompletny, dynamiczny system obsługi archiwum wiadomości, którego
będziemy mogli użyć na dowolnej witrynie utworzonej we Flashu. Aplikacja ta będzie uwieńczeniem naszych
rozważań związanych z bazami danych, toczonych w ciągu kilku ostatnich rozdziałów, choć wykorzystamy
również techniki poznane w innych rozdziałach.
Pamiętajmy, że instruktaż instalacji PHP oraz MySQL dla Windows, Maca oraz Linuxa można znaleźć w
Dodatku A.
Gdy PHP spotyka MySQL
No dobrze, czas zająć się sposobami wykorzystania PHP do pobierania i manipulowania danymi gromadzonymi
w bazach MySQL. Musimy zacząć od tego właśnie zagadnienia, gdyż Flash nie ma bezpośredniego dostępu do
baz danych MySQL, w związku z czym PHP posłuży nam jako pośrednik — dostarczając nam informacji na
żądanie.
W chwili pisania tej książki, PHP dysponował ponad trzydziestoma wbudowanymi funkcjami obsługi MySQL,
z których wiele spełnia zadania podobne, lub nieco prostsze, jak omówione wcześniej polecenia SQL. Opis
wszystkich tych funkcji zająłby nam zbyt wiele miejsca, a zatem pozostaniemy tylko przy najczęściej
używanych.
Połączenie z serwerem MySQL
Pierwsza czynność, jaką musimy wykonać za pośrednictwem skryptu PHP, chcąc nawiązać interakcję z
MySQL, jest połączenie z serwerem MySQL. Zabieg ten jest niezbędny, gdyż skrypty PHP nie mają dostępu do
MySQL dopóki tego nie zażądamy. Składnia funkcji wygląda następująco:
mysql_connect([hostname [, username [, password]]]);
1
Argument hostname przekazuje nazwę hosta, na którym uruchomiony jest serwer MySQL. Jeżeli serwer
MySQL i serwer sieciowy pracują na tym samym komputerze, wówczas argument ten może przyjąć wartość
localhost , która jest wartością domyślną w przypadku, gdy nie zdefiniujemy nazwy hosta.
Argument username przekazuje nazwę użytkownika uprawnionego do połączenia z serwerem MySQL. Z
kolei argument password odpowiada hasłu przypisanemu określonemu użytkownikowi.
Po pomyślnym nawiązaniu połączenia, funkcja zwraca odnośnik połączenia, który ma postać dodatniej liczby
całkowitej, a nazywany jest identyfikatorem łącza. W razie niepowodzenia, zwracaną wartością jest false.
Rzeczony identyfikator będziemy wykorzystywać w wywołaniach innych funkcji PHP, współdziałających z
MySQL.
Zwróćmy uwagę, że wszystkie trzy argumenty wywołania mysql_connect są opcjonalne (co symbolizują
kwadratowe nawiasy). Jeśli nie przekażemy żadnych argumentów, wówczas PHP podejmie próbę nawiązania
połączenia z serwerem MySQL pracującym na komputerze localhost , nie przesyłając informacji o
użytkowniku ani haśle. Zagnieżdżone nawiasy kwadratowe oznaczają, że jeśli podamy argument username ,
musimy także przekazać argument hostname , a jeżeli podane zostanie hasło password , konieczne będzie
również zdefiniowanie argumentów hostname i username .
W całym rozdziale będziemy używać wyrazów " user " oraz " pass ", które oznaczać będą nazwę użytkownika i
hasło dostępu do serwera bazy danych. Wpisując kody powinniśmy zamienić je własnymi nazwami i hasłami.
Jeśli posłużymy się instruktażem instalacyjnym, zamieszczonym w Dodatku A , będziemy musieli wykorzystać
podaną tam nazwę i hasło.
Jeżeli utrzymując serwer korzystamy z usług obcych, uzyskanie tych informacji może wymagać kontaktu z
działem technicznym usługodawcy. Konieczne będzie również użycie innej nazwy, niż localhost , i aby ją
otrzymać, również będziemy musieli zwrócić się do właściciela hosta.
Przyjrzyjmy się więc działaniu funkcji mysql_connect .
<?
// connect.php
// Chapter 9 - Foundation PHP for Flash
// Próba połączenia z serwerem MySQL
$link = @mysql_connect("localhost", "user", "pass");
// Jeśli próba połączenia powiedzie się…
if ($link) {
// Wynikiem jest identyfikator łącza
print "Link ID is $link";
} else {
// W przeciwnym razie pojawia się komunikat o błędzie
print "Error connecting to database server";
}
?>
Ponieważ wykorzystujemy tu własny komunikat o błędzie, użyty został operator zawieszania błędów @ ,
umieszczony tuż przed wywołaniem mysql_connect , a mający na celu powstrzymanie PHP przed
generowaniem własnych komunikatów, w razie niepowodzenia próby nawiązania połączenia.
Zadaniem tego krótkiego kodu jest nawiązanie połączenia z bazą danych MySQL. Po pomyślnym wykonaniu
tego zadania, otrzymujemy wynik w postaci zmiennej $link , przechowującej identyfikator łącza.
Jeżeli próba nie powiedzie się i ujrzymy komunikat o błędzie, powinniśmy upewnić się, że użyliśmy
poprawnych argumentów w wywołaniu mysql_connect . Należy dwa razy sprawdzić informacje źródłowe,
kontrolując ich poprawność, i spróbować ponownie.
Po nawiązaniu połączenia na ekranie powinien pojawić się wynik podobny do pokazanego poniżej:
Cóż to oznacza? 1 (lub jakakolwiek inna, dodatnia liczba całkowita) to wartość wskazująca na pomyślne
nawiązanie połączenia z serwerem MySQL. W przypadku niepowodzenia, pojawić się powinien taki oto
komunikat:
Error connecting to database server
No dobrze, nie jest to może wiedza na miarę technologii rakietowej, ale zrobiliśmy pierwszy krok w dziedzinie
korzystania z danych zawartych w bazie MySQL, za pomocą aplikacji Flasha i PHP.
2
Warto nadmienić, że funkcja mysql_connect pozwala otwierać więcej niż tylko jedno połączenie. Wydaje
się to oczywiste, ale fakt ten często jest pomijany w omówieniach interakcji PHP z MySQL. Z tej możliwości
korzysta się jednak raczej rzadko i wystarczy, jeśli będziemy o niej pamiętać.
Odłączanie od serwera MySQL
Choć połączenie z serwerem MySQL jest zamykane automatycznie, po zakończeniu działania skryptu, godną
pochwały praktyką jest własnoręczne zamykanie połączenia, po wykorzystaniu. Można to porównać do dobrych
manier. Nie wypada po prostu wstać i wyjść, będąc u kogoś w gościnie, nieprawdaż?
Funkcja, której należy użyć w tej sytuacji to, jak można się domyślić, mysql_close . Format jej wywołania
wygląda następująco:
mysql_close( [ link_id ] );
mysql_close pobiera tylko jeden, opcjonalny argument, w postaci identyfikatora połączenia, które ma ulec
zamknięciu. Jeśli nie podamy żadnego identyfikatora, wówczas zamykana jest ostatnio otwarte połączenie z
bazą danych. Po pomyślnym wykonaniu operacji funkcja zwraca wartość true , a w przypadku niepowodzenia
false .
Wróćmy więc do poprzedniego przykładu, dopisując do niego wywołanie mysql_close :
<?
// disconnect.php
// Chapter 9 - Foundation PHP for Flash
// Attempt to connect to the MySQL server
$link = @mysql_connect("localhost", "", "");
// If the connection was successful...
if ($link) {
// Output link identifier
print "Link ID is $link<br>\n";
// Close the connection
mysql_close($link);
print "You are the weakest \$link ... goodbye!";
} else {
// Otherwise, output error information
print "Error connecting to database server";
}
?>
Zapisaliśmy tu wywołanie mysql_close , ale umieściliśmy je wewnątrz instrukcji if , gdyż zamykanie
połączenia, którego nawiązanie nie powiodło się, nie ma sensu.
Choć umiejętności nawiązywania i zrywania połączeń z serwerem MySQL są użyteczne — a nawet niezbędne
— nie są to najważniejsze spośród zagadnień, o których była mowa na początku rozdziału. Przejdźmy więc dalej
i pomówmy o tym, w jaki sposób możemy namówić MySQL do działania według naszych poleceń!
Selekcjonowanie bazy danych
Po nawiązaniu połączenia z serwerem baz danych, jesteśmy gotowi do współdziałania z tymi bazami. Jednakże,
zanim sięgniemy po najsmaczniejsze kąski, musimy wskazać MySQL, z której bazy zamierzamy skorzystać.
Kto zainstalował MySQL w swoim komputerze i na bieżąco wykonywał czynności opisywane w poprzednich
rozdziałach, ten już dysponuje bazą danych, na której może skupić swoje działania, o nazwie phpforflash .
Kto jednak utrzymuje swoją witrynę na serwerze firmy hostingowej, ten powinien dowiedzieć się o nazwę, pod
jaką baza danych została alokowana.
Funkcją, którą musimy się posłużyć, by wskazać MySQL bazę danych, jest mysql_select_db .
mysql_select_db( db_name [, link_id ]);
3
Łańcuch db_name to nazwa selekcjonowanej bazy danych, a opcjonalny argument link_id wskazuje
identyfikator połączenia, którego chcemy użyć podczas wykonywania tej operacji. Jeśli pominiemy drugi
argument, wówczas użyte zostanie ostatnio utworzone połączenie.
Jeśli baza danych zostanie wyselekcjonowana pomyślnie, wtedy funkcja zwróci wartość true , a w przeciwnym
razie wartość false .
Spójrzmy na to wszystko w praktyce...
<?
// Attempt to connect to the MySQL server
$link = @mysql_connect("localhost", "", "");
// If the connection was unsuccessful...
if (!$link) {
// Output error information and exit
print "Error connecting to database server";
exit;
}
// Attempt to select database. If successful…
if (@mysql_select_db("phpforflash") ) {
// Inform user of success
print "Database selected";
} else {
// Otherwise inform user of failure
print "Couldn't select database";
}
// Close the connection
mysql_close($link);
?>
Można tu zauważyć niewielkie przetasowania kodu. Wzięły się one stąd, że omawiając kolejne funkcje PHP w
tym rozdziale, będziemy budować kompletny skrypt, zdolny do odczytywania wiadomości z tablicy news , którą
opracowaliśmy w poprzednim rozdziale. Jeśli ktoś jej nie wykonał, nie musi się tym martwić, gdyż w dalszej
części rozdziału będziemy omawiać ten etap pod kątem PHP.
Najważniejszą, z naszego punkty widzenia, częścią tego kodu jest wywołanie mysql_select_db . Za jego
pomocą selekcjonujemy naszą bazę danych phpforflash , a sprawdzając wartość zwróconą przez instrukcję if ,
dowiadujemy się czy operacja zakończyła się sukcesem. Pociąga to za sobą wygenerowanie odpowiedniego
komunikatu, a skrypt kończy się zamknięciem połączenia z bazą danych.
Ci, którzy nie utworzyli bazy danych w poprzednim rozdziale, zamiast komunikatu pokazanego na ilustracji
otrzymają komunikat o błędzie. Wynika to stąd, że niemożliwe jest wyselekcjonowanie nieistniejącej bazy
danych.
Tworzenie bazy danych poprzez PHP
Po omówieniu tych wszystkich funkcji PHP, na pewno nie zaskoczy nas fakt, że PHP wyposażono również w
funkcje pozwalające tworzyć bazy danych poprzez MySQL. Powinniśmy zaznajomić się także ze schematem
nazewnictwa tych funkcji, co łatwi nam odszyfrowywanie ich zastosowania.
Funkcja ma nazwę mysql_create_db i wygląda, mniej więcej, w taki sposób:
mysql_create_db( db_name [, link_id ] );
Argument db_name jest nazwą bazy danych, którą zamierzamy utworzyć, a link_id to identyfikator
połączenia z serwerem MySQL, którego chcemy użyć (argument ten jest opcjonalny).
Funkcja zwraca true po pomyślnym utworzeniu bazy, a false w przypadku przeciwnym.
Każdy czujny Czytelnik z pewnością zauważył podobieństwo tej funkcji do polecenia SQL.
CREATE DATABASE db_name ;
Ponieważ naszym celem jest tylko utworzenie bazy danych, nie uczynimy tego poprzez skrypt, który właśnie
budujemy. Zamiast tego wykorzystamy mini-skrypt i za jego pomocą zbudujemy bazę danych, o ile jeszcze nią
4
nie dysponujemy. Do tego skryptu powrócimy nieco później i uzupełnimy go kodem tworzącym tablice, co
pozwoli nam wykorzystywać jako skryptu przygotowawczego dla aplikacji — niezłe, nieprawdaż?
A co do treści mini-skryptu:
<?
// newssetup.php
// Chapter 9 - Foundation PHP for Flash
// Attempt to connect to the MySQL server
$link = @mysql_connect("localhost", "", "");
// If the connection was unsuccessful...
if (!$link) {
// Output error information and exit
print "Error connecting to database server";
exit;
}
// Attempt to create database. If successful...
if (@mysql_create_db("phpforflash")) {
// Inform user of success
print "Database created<br>\n";
} else {
// Otherwise, tell user there was an error
print "Couldn't create database<br>\n";
}
// Close the connection
mysql_close($link);
?>
Jak widać, skrypt ten składa się w dużej części z takiego samego kodu, jak budowany przez nas skrypt główny.
Wynika to stąd, że musimy zachować możliwość łączenia i odłączania od serwera bazy danych, a także
informowania użytkownika o pomyślnym przebiegu operacji.
Usługobiorcy firm hostingowych mogą nie mieć możliwości tworzenia baz danych tym sposobem, gdyż
uruchomienie powyższego skryptu powodować będzie pojawienie się komunikatu o błędzie. Jeśli tak się stanie,
a baza danych nie jest tworzona w sposób automatyczny, wówczas należy skontaktować się z działem
technicznym firmy zarządzającej hostem i zażądać utworzenia bazy danych.
Po pomyślnym zakończeniu operacji, mając dostęp do monitor MySQL, bądź to na własnym komputerze, bądź
poprzez telnet na zdalnym serwerze, możemy uruchomić podgląd nowo utworzonej bazy, wydając polecenie
SHOW DATABASES , o którym mówiliśmy w poprzednim rozdziale. Polecenie spowoduje wyświetlenie listy
baz danych na serwerze MySQL, pośród których powinna znajdować się nasza, nowo utworzona.
Usuwanie bazy danych
Czy dużą niespodzianką będzie wiadomość, że za pomocą odpowiedniej funkcji PHP można również kasować
bazy danych? Z pewnością nie! Funkcja, o której mowa, nazywa się mysql_drop_db .
mysql_drop_db( db_name [, link_id ]);
Jeśli ktoś nie pamięta znaczenia argumentów, niech zerknie w tył, na dwie poprzednio omawiane funkcje — jest
ono takie samo. I jak w obydwóch, poprzednich przypadkach, gdy operacje powiedzie się, funkcja zwraca
true , a w przeciwnym razie false .
Nie będziemy korzystać z tej funkcji, gdyż spowodowalibyśmy usunięcie naszej, dopiero co utworzonej bazy
danych. Chcąc jednak usunąć bazę phpforflash , moglibyśmy to uczynić za pomocą następującego wywołania
funkcji:
mysql_drop_db("phpforflash");
5
Zgłoś jeśli naruszono regulamin