profil

PHP, MySQL, SQL, CGI, bazy danych w internecie

poleca 85% 138 głosów

Treść
Grafika
Filmy
Komentarze

MySQL

MySQL to obok PostgreSQL najpopularniejszy z wolno dostępnych silników relacyjnych baz danych.
MySQL był pisany raczej z myślą o szybkości, niż kompatybilności ze standardem SQL – przez dłuższy czas MySQL nie obsługiwał nawet transakcji, co było zresztą głównym argumentem przeciwników tego silnika bazodanowego (najczęściej zwolenników PostgreSQL) – w nowszych wersjach (>=4) jest jednak zaimplementowana większość istotnych funkcji.

MySQL posiada wiele back-endów, między innymi:

* MyISAM - domyślny typ baz danych, nie obsługuje transakcji
* HEAP - najszybszy typ baz danych, gdyż wszystko jest przechowywane wyłącznie w pamięci RAM. Posiada jednak kilka ograniczeń, między innymi nie przechowuje danych po wyłączeniu serwera MySQL.
* InnoDB - obsługuje transakcje
* BerkeleyDB - obsługuje transakcje, jak dotychczas nie w pełni zintegrowany z MySQL

MySQL jest dostępny na licencji GPL, jednakże można nabyć również zamknięte licencje.

Połączenia z bazami MySQL można nawiązywać z wielu języków programowania, m.in C, C++, Delphi, czy PHP, a sam system dostępny jest na wiele istniejących obecnie platform, w tym na Windows i Linux.

Wraz z serwerem Apache i parserem PHP zaimplementowanymi na platformie Linux stanowi popularne środowisko serwerowe - LAMP.


Co to jest SQL

SQL - Structured Query Language, jest to standardowy język zapytań do obsługi relacyjnej bazy danych oraz relacyjno-obiektowej bazy danych. Jest językiem programowania baz danych i ich sieciowych serwerów.
Pierwowzorem SQL był opracowany przez IBM we wczesnych latach siedemdziesiątych XX wieku język SEQUEL (E. F. Codd). Stał się międzynarodowym standardem dla języków baz danych i występuje obecnie w produktach większości liczących się firm, zajmujących się sprzedażą oprogramowania dla baz danych.
Obecnie dostępna jest już czwarta generacja tego języka, przy czym jest ona wykorzystywana tylko w bazach relacyjno-obiektowych. W RDBMS zaawansowane możliwości SQL4 nie są potrzebne, ponieważ i tak nie były by wykorzystane, dlatego cały czas jest stosowany SQL w wersji 2, który w zupełności wystarcza dla baz relacyjnych.
Ponieważ SQL jest językiem standaryzowanym, dostęp do danych jest możliwy przez wiele różnych platform sprzętowych, w tym komputery osobiste, mikrokomputery i duże komputery. Inna korzyść związana z SQL polega na tym, że takie oprogramowanie jak arkusze kalkulacyjne czy procesory tekstów może importować dane z baz danych opartych na SQL.
Polecenia SQL maja postać zbliżoną do zdań w języku angielskim i są stosowane w celu uzyskania dostępu do danych i sterowania operacjami w bazie danych. Użytkownik mający małe doświadczenie w przetwarzaniu danych lub nie mający go wcale, może szybko nauczyć się podstawowych konstrukcji SQL, a ekspert od przetwarzania danych może znaleźć w tym języku pełny zestaw potrzebnych mu narzędzi, dzięki temu jest to język, którego używają zarówno zwykli użytkownicy, jak i specjaliści od przetwarzania danych.
SQL, podobnie jak np. Pascal, jest językiem strukturalnym, zdefiniowanym za pomocą reguł składniowych.

Występują w nim trzy rodzaje poleceń.
1. Pierwszy rodzaj to polecenia języka definiowania danych, które umożliwiają tworzenie obiektów bazy danych, takie jak tabela i perspektywy.
2. Drugi rodzaj to polecenia języka operowania danymi, które są używane do wydobywania informacji z bazy danych, usuwania informacji z bazy danych i dodawania ich do niej.
3. Trzeci rodzaj to polecenia języka administrowania danymi, które służą do przyznawania i odwoływania uprawnienia dostępu do bazy danych. Użytkownik może korzystać z poleceń SQL w sposób interakcyjny bądź za pomocą takiego interfejsu jak zapytanie przez przykład ( QBE ).
Kiedy używa się SQL, wszystkie dane są dostępne za pomocą standardowego interfejsu użytkownika. Użytkownicy i komputery współpracują ze sobą przy użyciu tego samego języka - SQL. W związku z czym zmniejsza się czas szkolenia potrzebnego przy zmianie miejsca pracy i systemu operacyjnego, przez pracownika.
Język SQL jest o wiele bardziej wydajny niż tradycyjne języki programowania. Program może być zapisany w kilku wierszach kodu, a nie jak w przypadku tradycyjnego języka programowania - na kilku stronach. Z tego powodu koszty tworzenia aplikacji są jedynie ułamkiem kosztów występujących przy użyciu tradycyjnych języków.
SQL może być użyty jako standardowe narzędzie umożliwiające dostęp do danych w różnorodnych środowiskach z różnym sprzętem komputerowym i różnymi systemami operacyjnymi.


Korzyści z jego używania

Jest wiele praktycznych korzyści korzystania z relacyjnego modelu baz danych. Łatwo jest się nauczyć relacyjnej bazy danych, ponieważ istnieje tylko jedna bardzo prosta struktura danych, którą jest tabela. Z tego powodu SQL jest pojęciowo łatwym narzędziem dla użytkownika przy wybieraniu, operowaniu i kontrolowaniu danych. W przypadku używania SQL, dane są łatwo dostępne dla wszystkich typów użytkowników. Systemy zarządzania relacyjną bazą danych dostarczają specjalnego programu nazywającego się optymalizatorem zapytań, który automatycznie szuka najbardziej wydajnej ścieżki dostępu do pożądanych wyników. Taki optymalizator automatycznie dostosowuje się do struktury lub schematu tabeli, co pozwala na nie modyfikowanie aplikacji. Kolejnym ważnym powodem wydajności relacyjnych baz danych jest możliwość bezpośredniego modyfikowania ich schematu bez zaburzenia istniejących aplikacji. Nowe kolumny i tabele mogą być zawsze dodawane bez obawy, że zajdzie potrzeba zmiany istniejących programów lub zdefiniowanych z góry ścieżek dostępu.

Podstawowej składni języka SQL

Główna forma zapytania
SELECT ,
SELECT [DISTINC] nazwy(a)_kolumny /*
FROM nazwa_tabeli ;

Selekcja wierszy z tabeli
SELECT [DISTINC] nazwy(a)_kolumny
FROM nazwa_tabeli
WHERE nazwa_kolumny operator_porównania wartość;

Uporządkowanie wierszy
SELECT [DISTINC] nazwy(a)_kolumny /*
FROM nazwa_tabeli
ORDER BY nazwy(a)_kolumn(y) / numer(y)_kolumn(y) [ASC/DESC] ;

Operatory porównania
= równe
< mniejsze niż
!= nie równe
<= mniejsze niż lub równe
> większe niż
>= większe niż lub równe

Wielokrotne warunki wyszukiwań
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE warunek AND warunek ;

Alternatywne warunki wyszukiwań
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE warunek OR warunek ;

Zakresowe wyszukiwania
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE nazwa_kolumny
[NOT] BETWEEN wartość_1 AND wartość_2 ;
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE wartość
[NOT] BETWEEN nazwa_kolumny_1 AND nazwa_kolumny_2

Uzgadnianie wzorców znakowych
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE nazwa_kolumny
[NOT] LIKE "napis" ;

Wyszukiwanie wartości NULL
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE nazwa_kolumny IS [NOT] NULL ;

Operatory porównania zbioru
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE nazwa_kolumny
[NOT] IN (wartość_1, wartość_2, .....) ;

Funkcje wbudowane
SELECT funkcja_wbudowana [DISTINCT] nazwa_kolumny
FROM nazwa_tabeli
[WHERE warunek] ;

Funkcje wbudowane w SQL
AVG
SUM
MIN
MAX
COUNT (może być użyta razem z *

Obliczenia
SELECT nazwy(a)_kolumn(y), wyrażenie arytmetyczne
FROM nazwa_tabeli
[WHERE warunek]
[ORDER BY nazwy(a)_kolumn(y) / *] ;

Operatory arytmetyczne
+ dodawanie
- odejmowanie
* mnożenie
/ dzielenie

Pod zapytania
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE nazwa_kolumny
operator_porównania / operator_porównania zbioru
(SELECT nazwa_kolumny
FROM nazwa_tabeli
[WHERE warunek] ) ;

Grupowanie
SELECT nazwy(a)_kolumn(y), funkcja_wbudowana(argument)
FROM nazwa_tabeli
[WHERE warunek]
GROUP BY nazwy(a)_kolumn(y)
[HAVING warunek]
[ORDER BY nazwy(a)_kolumny / numer(y)_kolumn(y) [ASC/DESC]] ;

Złączanie tabel
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli, nazwa_tabeli [,nazwa_tabeli, .....]
WHERE warunek_złączenia
[AND / OR warunek]
[ORDER BY nazwy(a)_kolumny / numer(y)_kolumn(y)] ;

Operowanie danymi
INSERT INTO nazwa_tabeli
[(nazwa_kolumny_1, nazwa_kolumny_2, ....)]
VALUES (wartość_1, wartość_2, ...);
INSERT INTO nazwa_tabeli
[(nazwa_kolumny_1, nazwa_kolumny_2, ....)]
VALUES (wartość_1, wartość_2, ...)
SELECT nazwy(a)_kolumn(y)
FROM nazwa_tabeli
WHERE warunek ; UPDATE nazwa_tabeli / nazwa_perspektywy
SET nazwa_kolumny_1=wartość / wyrażenie_arytmetyczne,
nazwa_kolumny_n=wartość / wyrażenie_arytmetyczne
[WHERE warunek];
DELETE FROM nazwa_tabeli
[WHERE warunek] ;

Definiowanie danych
CREATE TABLE nazwa_tabeli
(nazwa_kolumny_1 typ_danych [NOT NULL]
nazwa_kolumny_2 typ_danych [NOT NULL]
nazwa_kolumny_n typ_danych [NOT NULL] ;
ALTER TABLE nazwa_tabeli
ADD nazwa_kloumny typ_danych;
DROP TABLE nazwa_tabeli ;
CREATE [UNIQUE] INDEX nazwa_indeksu
ON nazwa_tabeli (nazwy(a)_kolumny [ASC/DESC]);
DROP INDEX (nazwa_indeksu);
CREATE SYNONYM nazwa_synonimu
FOR nazwa_tabeli / nazwa_perspektywy;
DROP SYNONYM nazwa_synonimu;
CREATE VIEW nazwa_perspektywy
AS instrukcja_zapytania_w_SQL ;
DROP VIEW nazwa_perspektywy;

Administrowanie danymi
GRANT ALL / SELECT / UPDATE / INSERT / DELETE / INDEX / ALTER
ON nazwy(a)_tabel(i) / nazwa_perspektyw(y)
TO nazwy(a)_użytkowników(a);
REVOKE ALL / SELECT / UPDATE / INSERT / DELETE / INDEX / ALTER
ON nazwy(a)_tabel(i) / nazwa_perspektyw(y)
TO nazwy(a)_użytkowników(a);

Podłączenie do serwera
Serwer bazy danych to program pracujący na jakiejś maszynie i oczekujący na skierowane do niego polecenia. Tym samym ma swój adres internetowy, z którym podobnie jak w przypadku serwera WWW musimy się połączyć. Każdy serwer może obsługiwać wiele baz danych, z których każda może zawierać wiele tabel. Taka konstrukcja oznacza, że próbując wydawać polecenia serwerowi musimy się najpierw z nim połączyć. Nie każdy ma prawo korzystać z bazy danych - system uprawnień przechowywany w kilku tabelach pozwala zweryfikować, czy połączenie z serwerem dokonuje uprawniony użytkownik. Weryfikacja uprawnień odbywa się za pomocą nazwy użytkownika i jego hasła.
Na podstawie powyższego wstępu powinniśmy już rozumieć, że wydanie jakichkolwiek poleceń SQL musi zostać poprzedzone połączeniem z serwerem, do czego niezbędne są: adres serwera (host), nazwa użytkownika (username) oraz hasło użytkownika (password). Podane w nawiasach określenia nie oznaczają, że tak właśnie te terminy musza brzmieć, ale często z takimi (lub podobnymi określeniami się spotkamy).
Zarządzanie serwerem lub swoją bazą na serwerze może się odbywać z tzw. linii poleceń, do czego wykorzystujemy połączenie telnetowe (lub alternatywne np. SSH). Po zalogowaniu możemy napisać (pogrubiona czcionka):
firesoft@tester ~ > mysql -u root -p
Enter password:
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
firesoft@tester ~ >

Połączenie z bazą za pomocą języka PHP
Jezyk PHP wspiera współpracę z bazą MySQL (i nie tylko z nią). W manualu można znaleźć wiele poleceń i funkcji języka, z których wykorzystamy za chwilę te, które niezbędne są do połączenia. Połączenia możemy dokonać w dwóch krokach:
mysql_connect("host", "username","password");
mysql_select_db("database");
W pierwszej linii połączyliśmy się z serwerem, a w drugiej wybraliśmy bazę danych, bo jak może pamiętamy, jeden serwer może obsługiwać więcej niż jedną bazę. W praktyce kod PHP jest bardziej rozbudowany - spróbujmy najpierw zobaczyć stosowny przykład.
$host = "baza.nazwadomeny.pl:23345";
$username = "tester";
$password = "haslotestera";
$database = "mojabaza";

$polaczenie = mysql_connect($host, $username, $password);
mysql_select_db($database, $polaczenie);
....
....
... rożne polecenia pobierania danych...
....
....
mysql_close($polaczenie);
?>

PHP

PHP (skrót to angielski akronim rekurencyjny: PHP: Hypertext Preprocessor) - skryptowy język programowania głównie wykonywany po stronie serwera, służący przede wszystkim do tworzenia dynamicznych stron WWW, z możliwością zagnieżdżania w HTML-u (bądź XHTML-u). Udostępniany na zasadach licencji open-source. Jego składnia bazuje na językach C, Java i Perl.

PHP może być używane nie tylko do tworzenia stron WWW. Jego modułowa budowa pozwala także na programowanie aplikacji z interfejsem graficznym (rozszerzenie PHP-GTK), a także na wykonywanie z linii poleceń (podobnie jak Perl i Python).
PHP pozwala także na interakcję z wieloma systemami relacyjnych baz danych (np. MySQL, Oracle, PostgreSQL) oraz na korzystanie z alternatywnych sposobów przechowywania danych - plików tekstowych i XML-a. Może być uruchamiane na większości systemów operacyjnych (uwzględniając najpopularniejsze) oraz serwerów sieciowych.

Implementacja PHP w środowisku Linux wraz z serwerem Apache i silnikiem baz danych MySQL stanowi popularną platformę serwerową, tzw. LAMP.

Historia PHP

Pierwsza wersja PHP, rozpowszechniana pod nazwą PHP/FI (Personal Home Page/Forms Interpreter), została stworzona przez Rasmusa Lerdorfa w roku 1994 jako "nakładka" na Perla, mająca uprościć jego używanie. Gdy autor udostępnił kod użytkownikom, dwóch izraelskich programistów - Zeev Suraski oraz Andi Gutmans - rozbudowało pierwotną wersję projektu i udostępniło w roku 1997 wersję drugą PHP/FI. Rozbudowa, a właściwie przebudowa jądra parsera trwała dalej - jego oficjalna, trzecia wersja, przemianowana z PHP/FI na PHP ukazała się w lipcu 1998 roku.

PHP 3.0 przyniosło wielkie zmiany, z których najważniejszą było wprowadzenie modułowości - użytkownicy mogli rozbudowywać funkcjonalność języka poprzez dodawanie zewnętrznych bibliotek.

Kolejna wersja PHP (czwarta) pojawiła się zimą 1998 roku - rozbudowano i poprawiono w niej obsługę modułów oraz zmieniono silnik parsera. Nazwano go Zend Engine (od imion twórców - Zeev and Andi). Pojawiło się także wiele mniejszych zmian - poprawiono współpracę z serwerami sieciowymi, obsługę sesji HTTP, buforowanie wyjścia, dodano kilka konstrukcji językowych.

W tej chwili aktualną wersją PHP jest 5.0.3, która ukazała się 15 grudnia 2004. PHP 5 opiera się na nowym Zend Engine w wersji 2.0. W stosunku do PHP 4, w sposób widoczny rozszerzono możliwości programowania obiektowego (podobnego do programowania obiektowego w języku Java lub C++), do tej pory zaniedbanego w PHP, od nowa napisano wsparcie dla XML, dodano SQLite, jednak nie dołączono bibliotek klienckich dla bazy danych MySQL. Zgodnie z wyjaśnieniami w FAQ, podczas kompilacji należy wykorzystać blibliotekę libmysqlclient zainstalowaną już w systemie.

Wstęp do PHP
W światku dostawców internetowych oraz twórców serwisów wyraźnie daje się zauważyć rosnąca popularność technologii PHP. Nie próbując analizować przyczyn tego zjawiska, warto zauważyć, że wspomniani dostawcy chętniej oferują dostęp do PHP, niż do CGI. Usługa ta pojawiła się także w ofercie dostawcy bezpłatnych miejsc na strony internetowe (http://www.phg.pl/). Być może właśnie dlatego, po tę technologię sięgają nie tylko zaawansowani twórcy stron WWW, ale także początkujący webmasterzy. Warto więc spojrzeć na PHP inaczej niż przez pryzmat specyfikacji, koncentrującej się na składni języka - warto spojrzeć z punktu widzenia korzyści, zasadności i wygody jej zastosowania.
Po co, na co i dlaczego?
W prasie, w serwisach i grupach dyskusyjnych, obok pojęcia PHP, często pojawia się pojęcie baza danych. Może to sprawiać wrażenie, że jedno bez drugiego nie może funkcjonować, a przecież nie jest to prawda. Przyznając, że PHP z bazami danych tworzą udaną parę, muszę jasno i dobitnie powiedzieć - PHP może oddać nieocenione usługi w różnych konstrukcjach - nie tylko w konstrukcjach opartych na bazach danych. Jeżeli jednak baza danych miałaby okazać się przydatna, niekoniecznie musi to być relacyjna baza danych typu MySQL, czy PostgreSQL, za korzystanie z której najczęściej trzeba dodatkowo zapłacić. Czasami w zupełności wystarczy plik o płaskiej strukturze, czyli zwykły plik tekstowy, którego poszczególne pola oddzielone są przecinkami, a każdy wiersz to oddzielny rekord.
Jakie korzyści może odnieść twórca nieskomplikowanej witryny, stosując technologię PHP? Spróbujmy wypunktować możliwości, z których być może, każdy rozpoczynający swoją przygodę z PHP na początku skorzysta:
• Modularyzacja witryny - to cecha charakterystyczna dla SSI (Server Side Includes), pozwalająca na włączenie do wielu stron serwisu, stałego fragmentu witryny (modułu), zapisanego w pojedynczym pliku. Typowym przykładem zastosowania jest nagłówek strony, menu serwisu, czy też stopka autorska, które zazwyczaj są takie same na wszystkich stronach. Nie muszę raczej wyjaśniać, że w razie potrzeby modernizacji któregoś z tych elementów, poprawek dokonujemy tylko w jednym pliku, a zmiany są widoczne na wszystkich stronach.

• Dynamiczne generowanie kodu - kolejna, w pewnym sensie trochę podobna do poprzedniej cecha, która pozwala generować dynamicznie fragmenty dokumentu (lub też całe dokumenty) i umieszczać je na więcej niż jednej stronie witryny. Typowymi przykładami mogą być skrypty generujące fragment o dzisiejszych imieninach, aktualnym dniu, licznik odwiedzin czy też wpisy księgi gości.

• Obsługa formularzy - istotą tej właściwości jest fakt, że PHP pobierając pola formularza utworzonego w języku HTML, automatycznie przekształca je w zmienne. Tym samym uzyskujemy łatwy dostęp do wartości tych pól, o możliwościach modyfikacji ich wartości nie wspominając.

• Funkcje formatujące - możliwe jest tworzenie i użycie funkcji formatujących wyświetlanie określonych fragmentów tekstu. Przykładem może być tytuł akapitu lub działu, którego treść przekazywana jest jako argument stworzonej funkcji, która zwraca ten sam, ale sformatowany już tekst.

Wtawki PHP wyróżniają się charakterystycznymi znacznikami. Mogą to być:
;

;

• <% . . . kod . . . %>;

.

W celu włączenia zewnętrznego pliku do skryptu PHP możemy użyć konstrukcji include("nazwa_pliku") lub require("nazwa_pliku"). W powyższym kontekście, wstawienie fragmentów do głównego pliku PHP możemy zrealizować następująco:



CGI

CGI (ang. Common Gateway Interface - interfejs bram sieciowych) jest jednym ze sposobów komunikacji serwera WWW z innymi aplikacjami. CGI umożliwia zarówno pobieranie danych pochodzących od przeglądarki jak i przekazywanie danych przeznaczonych dla niej.
Terminy "program CGI" i "skrypt CGI" są funkcjonalnie jednoznaczne. Powodem, dla którego programy CGI nazywane są często skryptami, jest popularność języków skryptowych (takich jak np. Perl) w ich tworzeniu.

Wśród rzeczy możliwych do osiągnięcia przy pomocy CGI znajdują się na przykład:
• pobieranie informacji z bazy danych i formatowanie rekordów w celu wyświetlenie ich zawartości na stronie,
• tworzenie ankiet i kwestionariuszy,
• tworzenie dynamicznych ilustracji - takich jak wykresy czy schematy.

Najważniejsze cechy CGI, to:

• Niezależność od platformy. CGI jest wbudowane w większość serwerów WWW, bez względu na to, z jakiej platformy korzystają. Wszystkie popularne serwery zawierają CGI, włączając w to serwery uniksowe (Apache, Netscape, NCSA, CERN...), oparte na Windows (Netscape, Microsoft IIS, O'Reilly WebSite) czy dla Macintosha (WebStar). Wiele innych serwerów zawiera również interfejs CGI.
• Skalowalność. Prostota interfejsu CGI sprawia, że jest on niezwykle łatwo skalowalny. Można użyć go do czegoś prostego, jak przesyłanie zawartości formularza na odpowiedni adres e-mail, ale również do budowania czegoś bardziej złożonego, jak internetowy supermarket, który korzysta z kilku baz danych Oracle.
• Niezależność od języka programowania. Programy CGI są niezależne od języka, w którym są napisane. Oznacza to, że można pisać tego typu programy w takim języku, jaki jest najwygodniejszy dla piszącego. Często wykorzystuje się Perla, TCL, C, C++, Visual Basic i AppleScript. Wiele z tych języków posiada biblioteki wspomagające obsługę CGI (generowanie kodu HTML, obsługa formularzy itp)

Obsługa CGI wiąże się zazwyczaj z tworzeniem nowego procesu na każde żądanie. Powoduje to duże obciążenie serwera zwłaszcza dla języków interpretowanych.

Powstały rozwiązania przyśpieszające typu FastCGI lub automatyczne tworzenie tymczasowych wersji kompilowanych.

Istnienie wersji CGI dla różnych platform nie oznacza jeszcze, że program napisany dla jednej platformy będzie działał na innej. Na szczęście aplikacje napisana na przykład w Javie lub Perlu, mogą być przenoszone z niewielkimi modyfikacjami, lub nawet bez nich. Programy w języku C muszą być przynajmniej rekompilowane.
Innym rozwiązaniem problemu dynamicznego tworzenia zawartości WWW są szablony z rozmaitymi językami skryptowymi (na przykład PHP czy ASP).

Załączniki:
Czy tekst był przydatny? Tak Nie

Czas czytania: 18 minut