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
Plik z chomika:
rafulus
Inne pliki z tego folderu:
dodatek_a.pdf
(213 KB)
dodatek_b.pdf
(205 KB)
dodatek_c.pdf
(104 KB)
okladka.pdf
(86 KB)
r01_t.pdf
(256 KB)
Inne foldery tego chomika:
Zgłoś jeśli
naruszono regulamin