Przeczytaj
Instalacja pakietu XAMPP
Do zrealizowania współpracy witryny internetowej z bazą danych konieczny jest dostęp do serwera HTTP – najpopularniejsze obecnie oprogramowanie serwerowe używane przez firmy hostingowe to Apache2 oraz Nginx.
Na potrzeby projektowania nowej strony lub nauki tworzenia aplikacji internetowych postępujemy nieco inaczej – instalujemy tzw. serwer lokalny, czyli taki, który widoczny jest tylko dla naszej karty sieciowej pod adresem: http://127.0.0.1
lub jego aliasem słownym: http://localhost
Istnieje wiele gotowych pakietów, zapewniających możliwość łatwej instalacji zarówno serwera lokalnego, jak również interpretera PHP współpracującego z bazami danych MySQL – do najpopularniejszych rozwiązań tego typu należy pakiet XAMPP (wieloplatformowy) oraz WAMPServer (tylko na Windows). W naszych lekcjach używać będziemy pierwszego rozwiązania.
Proces instalacji, konfiguracji oraz instrukcję użycia pakietu pobranego z witryny fundacji Apache Friends przedstawiono w tutorialu:
Język komunikacji witryny z bazą danych
Pierwszym językiem programowania, z którym będziemy mieli styczność w kontekście zapewnienia współpracy strony internetowej z bazą danych, jest PHP. Jest to pełnoprawny, skryptowy język programowania stworzony przez Rasmusa Lerdorfa. Twórca PHP wykorzystał w jego składni mnóstwo elementów znanych już wcześniej w językach C/C++ oraz BASH (skrypty powłoki systemowej Unix/Linux).
To właśnie zapożyczenie z języka BASH sprawiło, iż w zmiennych tworzonych w PHP pojawia się charakterystyczny operator $
poprzedzający nazwę pojemnika na dane:
Jeżeli podczas dotychczasowych zajęć w szkole poznałeś już konstrukcje językowe oraz składnię języków C/C++, to bardzo komfortowo i szybko odnajdziesz się także w PHP. Najważniejsza różnica pomiędzy pisaniem programów wykonywalnych i skryptów polega na tym, iż kod PHP wykonywany jest tylko przez procesor serwera, a nie lokalnego komputera.
Nie stworzyłem języka PHP, który znamy dzisiaj. To dziesiątki, jeśli nie setki ludzi opracowało PHP. Ja zwyczajnie byłem pierwszą osobą na świecie, która nad nim pracowała.
Wszystkie pliki PHP (w tym zawierające instrukcje komunikowania się z bazą danych i wykonywania zapytań SQL) znajdują się tylko na serwerze. Gdy się nad tym głębiej zastanowimy, jest to logiczne – skoro baza danych zawiera dane osobowe internautów (np. historię zamówień dokonanych w sklepie internetowym), to takie wrażliwe informacje muszą być przechowywane jedynie po stronie serwera. Wszystkie technologie webowe, które realizowane są zdalnie, określamy mianem back‑enduback‑endu.
Mianem front‑endufront‑endu określa się zaś technologie webowe, których kody źródłowe wykonywane są przez procesor na komputerze użytkownika witryny (czyli w praktyce przez jego przeglądarkę internetową). Pliki te muszą trafić do klienta przed ich wykonaniem, co w praktyce określimy jako proces wczytywania się witryny.
Rozszerzenia PHP
W celu połączenia witryny z bazą danych z użyciem PHP możemy skorzystać z trzech dostępnych w tym języku rozszerzeń (bibliotek) komunikacyjnych. Taką dedykowaną konkretnemu zadaniu bibliotekę, w nomenklaturze programistów określamy mianem interfejsu APIinterfejsu API. Taki interfejs może być proceduralny albo obiektowy.
Jeżeli mamy interfejs proceduralny, to oznacza to, że operacje bazodanowe realizowane są przez odpowiednio przygotowane i wywołane funkcje. Każda funkcja wykonuje unikalne, dające się jednoznacznie wyróżnić działanie związane z bazą danych (np. ustanawia połączenie, wykonuje kwerendę).
Jeśli zaś interfejs API jest obiektowy, to oznacza to, że operacje bazodanowe realizowane są przez skonstruowane z użyciem klas obiekty oraz metody (czyli funkcje wewnątrz klas), wywoływane na rzecz tychże stworzonych obiektów.
Dostępne interfejsy API dedykowane komunikacji PHP z bazą danych MySQL:
mysql
– stara biblioteka istniejąca w PHP już od wersji 2.0, obecnie nie zaleca się jej stosowania. Od wersji PHP 5.5 to rozszerzenie jest zdeprecjonowane (jego użycie wygeneruje ostrzeżenie), zaś od wersji PHP 7.0 zostało całkowicie wycofane ze standardu języka. Jest to API proceduralne, brak interfejsu obiektowego;mysqli
– nowoczesna i w pełni funkcjonalna biblioteka - litera i w nazwie pochodzi od słowa improved, co znaczy: ulepszona, poprawiona. API w pełni aktualne, współczesne, zalecane do użycia w nowych projektach. Oferuje do dyspozycji zarówno interfejs proceduralny, jak i obiektowy;PDO
– akronim od PHP Data Objects - w pełni obiektowa biblioteka obsługująca komunikację z bazą danych. Największą zaletąPDO
jest obsługa innych silników bazodanowych aniżeli MySQL.
Przyjrzyjmy się także porównaniu tych rozszerzeń w postaci tabelarycznej:
Rozszerzenie (API) | mysql | mysqli | PDO |
---|---|---|---|
Wprowadzono w wersji PHP | 2.0 | 5.0 | 5.0 |
Wsparcie dla rozszerzenia | zdeprecjonowane od PHP 5.5, usunięte od PHP 7.0 | aktywnie wspierane | aktywnie wspierane |
Zalecane dla nowych projektów | nie | tak | tak |
Interfejs proceduralny | tak | tak | nie |
Interfejs obiektowy | nie | tak | tak |
Użycie różnych silników SQL | nie | nie | tak |
Nawiązanie połączenia z bazą danych
W naszych pierwszych skryptach PHP użyjemy rozszerzenia mysqli w wersji proceduralnej. Połączenie z bazą danych nawiązujemy w następujący sposób:
Wewnątrz funkcji użyto kolejno czterech parametrów:
host (adres komputera przechowujący bazę), na serwerze lokalnym jest to adres
127.0.0.1
albolocalhost;
login użytkownika MySQL (musi posiadać stosowne uprawnienia), na serwerze lokalnym jest to użytkownik o nazwie
root;
hasło dostępowe użytkownika MySQL (na serwerze lokalnym jest one puste);
nazwa bazy danych, z którą chcemy nawiązać połączenie.
Ponieważ nawiązanie połączenia może się zwyczajnie nie udać (chociażby dlatego, że podany użytkownik lub jego hasło jest niepoprawne lub baza danych nie istnieje), to pojawił się na końcu funkcji dodatkowy zapis or die()
. Tłumaczymy taki zapis wprost jako: lub zabij skrypt. W razie wykrycia błędu połączenia dalsze wykonanie skryptu PHP zostanie wstrzymane, zaś w witrynie pojawi się komunikat umieszczony w nawiasie.
Połączenie z bazą danych musiało zostać nazwane – u nas jest to zmienna PHP o nazwie $c
– od słowa: connection. Identyfikator połączenia jest niezbędny, ponieważ w skrypcie może zostać zdefiniowane więcej niż jedno połączenie!
Poprawna obsługa polskich znaków
Już po nawiązaniu połączenia, włączamy obsługę standardu UTF‑8 dla przesyłanych danych, używając poniższej funkcji:
Argumentami tej funkcji są kolejno:
identyfikator połączenia, które musi zostać powyżej tej linii poprawnie nawiązane i pozostawać aktualnie aktywne (niezamknięte),
nazwa zestawu znaków, współcześnie używamy standardu UTF‑8.
Nazwę standardu wewnątrz funkcji zapisujemy bez myślnika: utf8
, inaczej niż to ma miejsce w języku HTML, gdzie zazwyczaj stosujemy zapis: utf‑8
.
Dodatkowo, aby zapewnić w całej witrynie poprawne kodowanie polskich znaków (w tym również tekstów wyjmowanych z bazy bądź wkładanych do niej) należy:
użyć w kodzie źródłowym witryny, wewnątrz znacznika
<html>
atrybutu:<html lang="pl">;
użyć w kodzie źródłowym witryny, w sekcji
<head>
, ponad tytułem<title>
znacznika<meta charset="utf‑8">;
ustawić kodowanie pliku z rozszerzeniem
.php
na standard UTF‑8. Na przykład w edytorze Notepad++ zmiany sposobu kodowania dokumentu dokonujemy wybierając z menu głównego:Format
(Encoding
) |Koduj w UTF‑8
;upewnić się, iż wszystkie pola typu tekstowego (znajdujące się w strukturze tabeli) bazy danych posiadają ustawioną metodę porównywania napisów
utf8_bin
alboutf8_polish_ci.
Wykonanie zapytania SQL
Kolejnym krokiem jest zdefiniowanie treści zapytania SQL, które mamy zamiar wykonać na naszej bazie danych. Treść kwerendy zostaje umieszczona w pomocniczej zmiennej, tutaj noszącej nazwę $q
nawiązującej do angielskiego słowa query. Jednakże rzeczywiste wykonanie kwerendy odbywa się dopiero w momencie wywołania funkcji mysqli_query()
:
Argumentami tej funkcji są kolejno:
identyfikator połączenia, które musi zostać powyżej tej linii poprawnie nawiązane oraz pozostawać aktualnie aktywne (niezamknięte);
treść zapytania, tutaj przechowywana w pomocniczej zmiennej
$q
.
Cała treść zapytania została zapisana w cudzysłowie, zaś nowa wartość będąca łańcuchem ograniczona jest apostrofami – użycie cudzysłowu spowodowałoby przedwczesne zakończenie treści całego zapytania i błąd składni!
Zamknięcie aktywnego połączenia
Po zakończeniu wszystkich działań dokonanych w skrypcie na bazie danych, wskazane jest zakończenie połączenia poniższą funkcją – jej jedynym parametrem jest identyfikator zamykanego połączenia:
Słownik
ogół technologii webowych (w tym HTML, CSS oraz w wielu zastosowaniach JavaScript), których pliki źródłowe wykonywane są przez przeglądarkę internetową klienta witryny; kody źródłowe zrealizowane w tych technologiach są jawne – każdy użytkownik serwisu może do nich zajrzeć, niezależnie od posiadanych uprawnień
ogół technologii webowych (w tym PHP, SQL), których pliki źródłowe wykonywane są przez procesor serwera; kody źródłowe zrealizowane w tych technologiach są dla klienta witryny niejawne, może do nich zajrzeć jedynie właściciel serwisu (albo ewentualnie uprawniona przez niego osoba posiadająca dostęp do dysku twardego serwera)
zestaw klas, metod, funkcji, zmiennych, parametrów, których aplikacja używa w celu zrealizowania zaplanowanych przez programistę zadań