r09-02.doc

(1426 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]]]);

 

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:

Rysunek 278.1.

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.

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

 

// Połączenie z serwerem bazy danych MySQL

$link = @mysql_connect("localhost", "", "");

 

// Jeśli połączenie powiodło się...

if ($link) {

    // Wyświetlamy identyfikator łącza

    print "Link ID is $link<br>\n";

 

    // Close the connection

    mysql_close($link);

    print "You are the weakest \$link ... goodbye!";

} else {

    // W przeciwnym razie, wyświetlamy informację o błędzie

    print "Error connecting to database server";

}

?>

Rysunek 280.1.

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]);

 

Ł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...

 

<?

// Połączenie z serwerem bazy danych MySQL

$link = @mysql_connect("localhost", "", "");

 

// Jeśli połączenie nie powidoło się...

if (!$link) {

    // Wyświetlamy komunikat o błędzie i opuszczamy skrypt

    print "Error connecting to database server";

    exit;

}

 

// Selekcjonowanie bazy danych. Jeśli powiodła się…

if (@mysql_select_db("phpforflash")) {

    // Informujemy użytkownika o powodzeniu

    print "Database selected";

} else {

    // W przeciwnym razie, informujemy użytkownika o niepowodzeniu

    print "Couldn't select database";

}

 

// Zamknięcie łącza

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.

Jeśli wszystko poszło dobrze to zobaczymy następujący ekran:

Rysunek 282.1.

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ą 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

 

// Połączenie z serwerem bazy danych MySQL

$link = @mysql_connect("localhost", "", "");

 

// Jesli połączenie nie zostało otwarte...

if (!$link) {

 

    // Wyświetlamy komunikat o błędzie i opuszczamy skrypt

    print "Error connecting to database server";

    exit;

}

 

// Tworzenie bazy danych. Jeśli się powiodło...

if (@mysql_create_db("phpforflash")) {

 

    // Informujemy użytkownika o powodzeniu

    print "Database created<br>\n";

} else {

 

    // W przeciwnym razie, informujemy użytkownika o niepowodzeniu

    print "Couldn't create database<br>\n";

}

// Zamknięcie łącza

mysql_close($link);

 

?>

Rysunek 284.1.

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.

Rysunek 285.1.

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.

...

Zgłoś jeśli naruszono regulamin