Poznałeś już HTML, wiesz co kryje się pod pojęciem PHP. Zdajesz już sobie sprawę z tego że przy jego pomocy możesz korzystać do tworzenia swoich stron bazę danych. No dobra, ale jak. Wbrew pozorom, na podstawowym poziomie jest to stosunkowo proste.

Spis treści:

  1. Wstęp
  2. Co to jest baza danych?
  3. Jak zmusić PHP do obsługi bazy danych?
  4. W takim razie co z $zapytanie? – SQL
  5. I co dalej?

1. Wstęp

Poznałeś już HTML, wiesz co kryje się pod pojęciem PHP. Zdajesz już sobie sprawę z tego że przy jego pomocy możesz korzystać do tworzenia swoich stron bazę danych. No dobra, ale jak. Wbrew pozorom, na podstawowym poziomie jest to stosunkowo proste.

Niniejszy artykuł kieruję do tych którzy już w podstawowym stopniu poznali PHP i napisali swoje pierwsze podręcznikowe „Hello World!”. Zajmę się w nim głównie budową zapytań do bazy danych. Jednak przedstawię też sposób przekazania danych z bazy do PHP. Ze względu na, moim zdaniem, największą popularność posłużymy się bazą danych MySQL.

Przedstawione zostaną tu jedynie podstawowe sposoby obsługi danych, wystarczające do rozpoczęcia przygody z bazami danych. Należy mieć świadomość, iż jest to tylko czubek góry lodowej i wiele jeszcze zostanie do nauczenia się. Choć jedną z najważniejszych rzeczy jest obsługa błędów i blokowanie dostępu zostaną one tu pominięte ze względu na początkujący charakter niniejszego artykułu. Zostawimy je na dalszy etap nauki.

2. Co to jest baza danych?

Aby w ogóle zacząć przygodę z bazami danych, musimy zrozumieć czym one są. W największym uproszczeniu możemy przyjąć iż jest ona nazwanym zbiorem tabelek.

Oczywiście aby tabelki te tworzyły bazę danych muszą spełnić dwa podstawowe warunki:

  • Każda tabelka musi byś nazwana
  • Każda musi zawierać minimum jedną kolumnę z unikalnymi danymi, które umożliwią w sposób jednoznaczny na identyfikację wiersza.

Każdy wiersz takiej tabelki to jeden tzw. krotka. Natomiast każda kolumna w tym wierszu to tzw. pole. Pole te mają z góry określony typ danych.

Pola, ich nazwy i typy danych są zdefiniowane jednoznacznie w procesie tworzenia tabeli w bazie danych.

3. Jak zmusić PHP do obsługi bazy danych?

Wbrew pozorom nie jest to takie trudne. PHP ma wiele funkcji przeznaczonych do obsługi bazy danych. Ponieważ niniejszy artykuł ma traktować o SQL’u więc przedstawię tylko te trzy podstawowe ze względu na nasze dalsze rozważania.

Pierwszą podstawową z nich jest funkcja wysyłająca zapytanie do bazy danych. Tak, cała obsługa bazy od strony PHP sprowadza się do wysyłania do niej zapytań i odpowiedniej interpretacji ich wyników.

$wynik=mysql_query($zapytanie); 

$wynik zawiera po prostu wynik który zwróciła baza danych na zapytanie wysłane do niej zdefiniowane uprzednio w zmiennej $zapytanie.

Ważnym jest tu od strony PHP wyłuskanie tego co nas interesuje z zmiennej $wynik. W naszym przypadku będziemy z niej wyłuskiwać dane tylko jeśli takowych oczekujemy, czyli chcemy pobrać dane z bazy. Załóżmy też iż dla prostoty dane będziemy pobierać do tabeli. W związku z tym musimy najpierw określić ile wierszy będzie miała nasza tablica.

Aby tego się dowiedzieć zastosujemy funkcję:

$iloscWierszy=mysql_num_rows($wynik); 

Warto zwrócić uwagę iż argumentem tej funkcji jest wynik funkcji którą przedstawiłem poprzednio.

Teraz zostanie już tylko pobrać dane do naszej tabelki. Tu przychodzi z pomocą funkcja która pobiera jeden rekord i zapisuje go do tablicy:

$tablicaRekordu=mysql_fetch_row($wynik); 

Mając już te funkcje, możemy napisać zarys skryptu do pobrania danych z bazy:

$wynik=mysql_query($zapytanie); 
for ($i=0; $i<mysql_num_rows($wynik); $i++) 
{ 
$tablicaRekoru=mysql_fetch_row($wynik); 
$naszeDane[$i][‘pole1’]=$tablicaRekordu[0]; 
$naszeDane[$i][‘pole2’]=$tablicaRekordu[1]; 
}; 

Teraz kilka uwag dotyczących przykładu. Po pierwsze dlaczego w tym przykładzie zostaną pobrane wszystkie rekordy? Ano dlatego, że funkcja mysql_fetch_row po pobraniu jednego rekordu automatycznie ustawia się na następnym. No i skąd wiadomo, że $tablicaRekordu[0], odpowiada naszemu polu o nazwie pole1? Dlatego iż dane w tej tablicy są ułożone w takiej kolejności jak o nie zapytaliśmy, lub w kolejności takiej jak były zdefiniowane w bazie. Tu już my musimy zadbać o to aby je odpowiednio przypisać.

4. W takim razie co z $zapytanie? – SQL

Nasza zmienna $zapytanie jest zwykłym tekstem zawierającym zapytanie do bazy danych w języku SQL. Tworzyć możemy ją używają dowolnych metod dozwolonych przez PHP. Ważne jest tylko to aby przed wysłaniem jej jako zapytanie zawierała właściwy tekst.

Bardzo ważną rzeczą w składni SQL, jakże często na początku zapominaną (a wiem z własnego doświadczenia) jest fakt że dla SQL’a polecenie kończy się w momencie postawienia średnika „;”, niezależnie od tego ile linii ono zajmie i ile „enterów’ po drodze wstawimy.

No dobra zaczynamy:

Tworzymy naszą bazę danych. Raz stworzona baza istnieje do czasu jej usunięcia. Do tworzenia służy następujące polecenie:

CREATE naszaBaza; 

NaszaBaza jest tu po prostu nawą własną bazy danych.

Dalej jeśli chcemy z niej w jakikolwiek sposób korzystać, musimy to jasno zadeklarować. Sprowadza się to praktycznie do wydania jednego zapytania na początku naszego skryptu.

USE naszaBaza; 

Jest to o tyle ważne iż baz danych może być wiele i musimy się zdecydować na korzystanie z jednej z nich, aby program wiedział na której ma operować.

Teraz mając bazę danych musimy w niej stworzyć tabele, aby mieć gdzie przechowywać nasze dane. Tabela tak samo jak baza, raz stworzona istnieje aż do jej usunięcia. Ale aby stworzyć tabelę musimy najpierw dowiedzieć się jakiego typu danych mogą być pola w niej zawarte. Oto lista podstawowych typów.

INT – przechowuje liczby całkowite.

REAL – przechowuje liczby rzeczywiste.

CHAR(D) – jest to typ znakowy o określonej przez D długości. Przy czym 0 < D < 255. VARCHAR(D) – przechowuje taką długość tekstu jaką do niego wprowadzimy, jednym jego ograniczeniem jest maksymalna długość określona przez D.

DATETIME – przechowuje dane na temat daty i czasu w ustalonym formacie.

TEXT – przechowuje większe ilości danych o makszymalnej wielkości 65535 b.

No to zabieramy się do stworzenia naszej pierwszej tabeli powiedzmy adresów:

CREATE TABLE adresy ( 
id INT not null auto_increment, 
imie VARCHAR(80), 
nazwisko VARCHAR(80), 
adres TEXT, 
wiek INT, 
primary key (id) 
); 

Analizując – do tworzenia tabeli służy CREATE TABLE, którego argumentem jest nazwa tabeli, którą w naszym przypadku jest „adresy” oraz definicja pól, mieszcząca się w nawiasie. Taki zapis przyjąłem ze względu na jego przejrzystość, ale to samo można zapisać w jednej linii. Dala przykładu zapis:

CREATE TABLE adresy (id INT not null auto_increment, imie VARCHAR(80), nazwisko VARCHAR(80), adres TEXT, wiek INT, primary key (id)); 

Jest zapisem równoznacznym z poprzednim i zadziała w ten sam sposób.

Następnie zdefiniowaliśmy 5 różnych pól o nazwach: id, imie, nazwisko, adres i wiek. Ważne jest aby w tych nazwach nie stosować polskich liter. Teraz przyjrzyjmy się dokładniej tym polom:

id – jest specyficznym polem, pozwalającym na jednoznaczną identyfikację rekordu. Pole to jest typu INT, ale w jego definicji wystąpiły jeszcze dwa sformułowania: not null, które oznacza iż pole to nie może pozostać puste, oraz auto_increment, które pozwala na automatyczną numerację pola. Na naszym etapie nauki przyjmijmy dla bezpieczeństwa iż tak ma być i zawsze definiujmy to pole, i to w sposób tutaj przedstawiony.

imie, nazwisko – to kolejne dwa pola typu VARCHAR, których maksymalną długość określiliśmy na 80 znaków.

adres – jest polem które przechowuje dowolne dane, w naszym konkretnym przypadku będzie przechowywało tekst adresu.

wiek – to pole przechowuje liczbę całkowitą, która posłuży nam do określenia wieku.

Ostatnie występujące tu określenie brzmi: primary key(id), służy ono nam do określenia, że unikalnym identyfikatorem rekordu będzie pole id. Przyjmijmy na razie tą samą zasadę co do pola id. Tak ma być i już.

Teraz zostało nam już najprostsze czyli dodawanie, usuwanie, poprawianie i usuwanie rekordów z tabel. Dalej w przykładach będę się posługiwał stworzoną w poprzednich przykładach bazą danych i tabelą. Podkreślam: Jedna baza może zawierać wiele tabel!

No to wstawiamy nasz pierwszy rekord:

INSERT INTO adresy VALUES( 
0, 'Anna', 'Przykładowa', 'ul. Nieznana 2, Nasze Miasto', 24); 

Tym oto sposobem wstawiliśmy pierwszy adres, Anny Przykładowej, mieszkającej na ulicy Nieznanej 2 w mieście Nasze Miasto, mającej 24 lata.

Co z tego jest najważniejsze, otóż oczywiście polecenie INSERT INTO, następnie wymieniamy gdzie, czyli nazwę tabeli do której wstawiamy dane, oraz słowo kluczowe VALUES które definiuje wartości do wstawienia.

Teraz dwie ważne uwagi. Po pierwsze wartości pól muszą być wprowadzone w takiej kolejności w jakiej zostały zdefiniowane, po drugie zmienne znakowe piszemy w pojedynczych cudzysłowach. Nie trudno także teraz zauważyć iż jako wartość pola id podaliśmy zero. Taką wartość podajemy zawsze, ponieważ w związku z definicją tego pola baza danych sama przypisze mu odpowiednią wartość.

Skoro mamy już jakieś rekordy w naszej tabeli, to możemy spróbować je wyświetlić. Do tego posłużymy się poleceniem SELECT:

SELECT * FROM adresy; 

Jak widać nie jest to takie trudne. Polecenie SELECT, następnie „*”, oznaczająca że mają zostać pobrane wszystkie pola, słowo kluczowe FROM, oraz nazwa tabeli z której pobieramy dane. Na naszym poziomie nauki przyjmijmy że dopóki się nie douczymy, będziemy korzystać tylko z znaku „*” w tym miejscu.

Jednak już na tym poziomie wiedzy powinniśmy wiedzieć, że po nawie tabeli mogą wystąpić różne dodatkowe przydatne funkcje. Nas na razie najbardziej interesuje WHERE, mówiące bazie że zwrócić w wyniku ma tylko konkretne rekordy. Np.:

SELECT * FROM adresy WHERE imie='Anna'; 

Takie zapytanie zwróci nam dane tylko z rekordów w których pole imie ma wartość „Anna”. Reszta to wasza inwencja twórcza.

Teraz pozostaje nabycie wyjątkowo łatwych umiejętności destrukcyjnych, czyli usuwania rekordów z tabeli. Czynimy to w następujący sposób:

DELETE FROM adresy WHERE id=3; 

Polecenie DELETE FROM, potem nazwa tabeli i warunki. Są one tu najważniejsze, gdyż z tabeli zostaną usunięte wszystkie rekordy je spełniające. Dlatego w naszym przykładzie usunęliśmy rekord o id równym 3. Takie rozwiązanie gwarantuje nam, że zostanie usunięty tylko jeden rekord. Oczywiście musimy wcześniej go pobrać i sprawdzić jaką wartość ma pole id i wstawić właściwą.

Gdybyśmy po WHERE napisali imie=’Anna’, zostałyby usunięte wszystkie rekordy których pole imie zawiera wartość „Anna”.

Po tej krótkiej lekcji nawet z poprawianiem danych łatwo sobie poradzić, przecież można pobrać dane, usunąć je z tabeli, następnie skorygować i wstawić ponownie. Jednak mamy tutaj do pomocy funkcję która dokona tego za nas, oczywiście z wyjątkiem dobrania odpowiednich wartości:

UPDATE adresy SET imie='Iwona', wiek=22 WHERE id=3; 

Instrukcja UPDATE po której musimy modać nazwę tabeli służy właśnie do tego. Zmieni ona wartości pól podanych po słowie kluczowym SET, pozostałe pozostawiając bez zmian. Oczywiście zmiana ta będzie dotyczyć tylko tych rekordów które spełnią warunki podane po słowie kluczowym WHERE. Tutaj stosujemy tą samą zasadę co do warunków instrukcji DELETE.

5. I co dalej?

Dalej pozostaje już życzyć powodzenia i inwencji twórczej w tworzeniu własnych baz danych.

Należy przy tym pamiętać o tym iż przedstawiona tutaj wiedza jest tylko początkiem podstaw, i jeśli Was to zainteresowało, i chcecie tworzyć własne bazy i na nich opierać swoje serwisy, pozostaje Wam jeszcze wiele do nauczenia się. Pomocnym może okazać się serwis http://www.mysql.org w którym można znaleźć wiele pomocnych informacji, ale niestety po angielsku.

Jest tam też dokumentacja do MySQL’a która na pewno się przyda na dalszym etapie poznawania tego zagadnienia: http://www.mysql.com/doc/en/index.html