|
Mysql |
|
|
|
|
Początek
Kurs ten przeznaczony jest dla osób uczących
się PHP, nie umiejących nawiązać połączenia i wykonywać operacji na bazach
danych. Wymagana jest podstawowa znajomość składni PHP i HTMLa. Nie wymagana
jest znajomość SQL - tutaj się jej nauczysz.
Czego się nauczysz w tej części kursu
Nauczysz się instalować bibliotekę PHP odpowiedzialną za połączenia z
serwerem baz danych MySQL. Będziesz umiał za pomocą PHP połączyć się z bazą
danych oraz wykonać na niej podstawowe operacje takie jak: tworzenie bazy
danych, tworzenie tabeli, zapisywanie informacji w tabeli, pobieranie
informacji z bazy danych oraz usuwanie rekordów z tabeli. Poznasz podstawową
składnię SQL.
Wstep
MySQL jest chyba jednym z najpopularniejszych interface'ów języka SQL
(Structured Query Language), charakteryzuje się ogromną elastycznością,
jeszcze większą prędkością i co najważniejsze jest bardzo łatwy w obsłudze.
Instalacja MySQL w PHP
Instalacja nie sprawi najmniejszych problemów nawet "zielonym" - wystarczy
otworzyć zwykłym edytorem tekstu plik php.ini (lub php3.ini - dla
użytkowników starszych wersji PHP), następnie znaleźć linijkę:
;extension=php_mysql.dll
i usunąć średnik, który znajduje się na początku linii. W przypadku
użytkowników systemów rodziny Unix rozszerzeniem biblioteki będzie ".so" a
nie ".dll". W ten sposób będziemy mogli korzystać z dobrodziejstw MySQL'a na
serwerze Apache. Aby połączenia z bazą danych działały należy zrestartować
serwer lub go uruchomić jeśli nie był wcześniej uruchomiony.
Uwaga: w niektórych wersjach PHP biblioteka MySQL jest domyślnie
wkompilowana, dlatego nie znajdziemy jej na liście w pliku php.ini
Połączenie z bazą danych
Gdy nasza wersja PHP ma już odpowiednie biblioteki do współpracy z serwerem
MySQL pierwszym krokiem, jaki będziemy chcieli wykonać jest połączenie z
bazą danych.
Aby połączyć się z bazą danych używamy funkcji mysql_connect z następująca
składnią:
mysql_connect([adres_serwera [, nazwa_użytkownika [, hasło]]]);
Pierwszym argumentem, jaki przyjmuje funkcja łączenia z bazą danych jest
adres serwera - może on być za równo w postaci adresu IP jak i nazwy hosta.
Za nazwą hosta po dwukropku możemy podać jeszcze numer portu adresu serwera
- nie jest to wymagane, jeśli nie podamy numeru portu nastąpi próba
połączenia na standardowym porcie 3306. Kolejnymi argumentami są nazwa i
hasło użytkownika bazy danych MySQL. Funkcja mysql_connect przyjmuje również
inne argumenty ale jako amatorzy nie będziemy o nich na razie mówili.
Na rozgrzewkę połączmy się z serwerem MySQL serwer.com na standardowym
porcie:
$sql_conn = mysql_connect('serwer.com', 'admin', 'passwd');
Wykonanie powyższego kodu połączy nas z serwerem na porcie 3306. Czasami
zdarza się tak, że administrator serwera MySQL zmieni numer portu,
połączenie na niestandardowym porcie wygląda w ten sposób:
$sql_conn = mysql_connect('serwer.com:27012', 'admin', 'passwd');
Funkcja mysql_connect zwróci identyfikator połączenia o ile zakończy się
sukcesem. Jeśli połączenie nie powiedzie się funkcja zwróci wartość false.
Jeśli zakończyłeś już operacje na swojej bazie należy się rozłączyć i
zwolnić zasoby. Za rozłączanie się z bazą danych odpowiedzialna jest funkcja
mysql_close() o następującej składni:
mysql_close([identyfikator_połączenia]);
Ostatni argument - identyfikator połączenia - nie jest wymagany, jeśli go
nie podamy zostanie zamknięte ostatnio otwarte połączenie przez użytkownika
na jakiego jesteśmy zalogowani do bazy danych. Aby zakończyć połączenie,
które zaprezentowałem powyżej należy wykonać następujący kod:
mysql_close($sql_conn);
Zapytania
Aby wykonać jakiekolwiek operacje na swojej bazie danych należy wysłać do
niej informacje o tym co chcemy zrobić. Wszystkie informacje wysyłamy w
postaci zapytań, do czego wykorzystujemy PHPową funkcję
mysql_query([zapytanie]);
Zapytania do bazy danych wysyłamy w następujący sposób:
$zaptanie = "treść zapytania SQL";
$idzapytania = mysql_query($zapytanie);
Po takiej operacji zmienna $wykonaj będzie zawierała identyfikator zapytania
o ile zapytanie zostanie wykonane pomyślnie. W przypadku, gdy popełniliśmy
błąd w zapytaniu zmienna $wykonaj będzie zawierała wartość false.
Tworzenie i wybieranie bazy
O ile nasz administrator nie utworzył nam wcześniej bazy danych lub sami
jesteśmy administratorami należy najpierw utworzyć bazę danych. Do
stworzenia nowej bazy używamy funkcji mysql_create_db() np.:
mysql_create_db('zawodnicy');
Funkcja zwróci wartość true, w przypadku gdy baza danych została utworzona
pomyślnie lub wartość false w przypadku gdy baza o takiej nazwie istnieje
lub nie mamy uprawnień aby ją utworzyć.
Samo utworzenie bazy danych nie oznacza, że właśnie na niej będziemy
wykonywać operacje, dlatego musimy ją wybrać, co robimy za pomocą funkcji
mysql_select_db(nazwa) np.:
mysql_select_db('zawodnicy');
Od tej pory wszelkie zapytania wysyłane do serwera będą wykonywane na bazie
danych zawodnicy.
Język SQL: tworzenie tabel
Gdy nasza baza jest już utworzona i mamy z nią połączenie możemy zacząć
wprowadzać dane, najpierw jednak trzeba utworzyć tabelę, robimy to według
następującego schematu składni SQL:
CREATE TABLE nazwa_tabeli (nazwa_pola1 typ_pola1 [atrybuty], nazwa_pola2
nazwa_pola2 [atrybuty], ... nazwa_polaN typ_polaN [atrybuty], PRIMARY
KEY(nazwa_polaX))
Postarajmy się stworzyć tabelę według danej składni:
$zapytanie = 'CREATE TABLE nba (id int NOT NULL AUTO_INCREMENT, imie
char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id))';
Każda tabela musi posiadać co najmniej jedno pole, dodatkowo musi posiadać
co najmniej jedno pole, które jednoznacznie identyfikuje wiersz w tabeli -
tak zwany klucz główny. Jeśli w tabeli jest masa danych a Ty znasz klucz
główny jednego z wierszy wtedy możesz bez problemu dostać się do tego
wiersza. W naszym przypadku kluczem głównym jest pole pierwsze - id.
Przeważnie nadaje jako klucz główny określa się pierwsze polew tabeli.
Dodatkowo klucz główny posiada dwa atrybuty: pierwszy - NOT NULL oznaczający,
że wartość tego pola nigdy nie może być pusta; drugi - AUTO_INCREMENT
oznaczający że wartość pola będzie automatycznie zwiększana przez bazę
danych przy dodawaniu kolejnych rekordów. Atrybut AUTO_INCREMENT możemy
stosować tylko do pól typu całkowitoliczbowego.
Dostępnych jest wiele typów pól, najpopularniejsze przedstawiam poniżej:
char(x) - ciąg znaków o maksymalnej długości x, gdzie x nie może być większy
od 255
blob - binarny ciąg znaków o długości ograniczonej przez pamięć twojego
serwera
text - tekstowy ciąg znaków o długości ograniczonej przez pamięć twojego
serwera
integer - liczba całkowita z przedziału -2147483647 do 2147483647
data - data w formacie określonym przez ustawienia serwera
year - rok, jeśli zostanie podany zły, jego wartość zmieni się w 0000
decimal(x, y) - liczba dziesiętna, gdzie x oznacza maksymalną liczbę cyfr, a
y maksymalną liczbę cyfr po przecinku.
Język SQL: dodawanie rekordów
Gdy mamy już utworzoną tabelę przydałoby się dodać do niej jakiś rekord,
robimy to według następującej składni:
INSERT INTO nazwa_tabeli (nazwa_pola1, nazwa_pola2) VALUES (wartosc_pola1,
wartosc_pola2)
Teraz pora na przykład, załóżmy, że chcemy dodać do naszej tabeli nowego
zawodnika, operacja ta wygląda tak:
$zapytanie = "INSERT INTO `nba` (`id`, `nazwisko`, `lata`, `punkty` , `mistrzostwa`)
VALUES ('', 'Jordan', '13', '32', '6')";
$idzapytania = mysql_query($zapytanie);
Według składni SQL nazwy pól i tabel powinno zawierać się w odwróconych
apostrofach (`). Po wykonaniu tego zapytania w tabeli nba będzie się
znajdował jeden wiersz z danymi, które podaliśmy.
Uwaga: Jako wartość pola id nie podaliśmy nic ponieważ jest to pole typu
AUTO_INCREMENT a co za tym idzie serwer baz danych sam nada temu polu
kolejną wartość. Jako, że jest to pierwszy rekord w tej tabeli wartość pola
id w tym rekordzie będzie wynosiła 1.
Język SQL: wybieranie rekordów
Jeśli chcemy przeszukać naszą tabelę w poszukiwaniu jakiegoś konkretnego
rekordu robimy to za pomocą komendy SELECT według składni:
SELECT nazwa_pola1,nazwa_pola2,...nazwa_polaN FROM nazwa_tabeli [WHERE
warunek]
W nazwach pól wybieramy jakie kolumny chcemy wyświetlić z danej tabeli,
możemy również zrobić to w następujący sposób:
SELECT * FROM nazwa_tabeli [WHERE warunek]
W powyższym wypadku wybierzemy wszystkie pola z danej tabeli jednak takie
rozwiązanie jest nie polecane z powodów wydajnościowych - lepiej wypisywać
konkretne nazwy pól, które nas interesują.
Warunek nie jest wymagany do określenia. Jeśli nie określimy warunku wybrane
zostaną wszystkie pola z tabeli. Załóżmy, że chcemy się dowiedzieć ile lat
już gra i ile punktów zrobił zawodnik o nazwisku "Pipen" - robimy to w
następujący sposób:
$zapytanie = "SELECT `lata`,`punkty` FROM `nba` WHERE `nazwisko`='Pipen'";
$idzapytania = mysql_query($zapytanie);
Po wykonaniu tego zapytania na serwerze baz danych zostaną wybrane wszystkie
rekordy, w których wartość pola nazwisko będzie równe Pipen.
Uwaga: w zależności od ustawień serwera baz danych wielkość liter może mieć
znaczenie dlatego "Pipen" nie zawsze dla serwera oznacz to samo co "pipen".
Jeśli będziemy chcieli wybrać wszystkie rekordy z tabeli po prostu unikamy
warunku. Np chcemy wybrać identyfikatory, nazwiska, lata spędzone w lidze i
punkty zebrane wszystkich zawodników - zrobimy to następująco:
$zapytanie = "SELECT `id`,`nazwisko`,`lata`,`punkty` FROM `nba`";
$idzapytania = mysql_query($zapytanie);
Wyświetlanie wybieranych rekordów
Gdy mamy już nasze zapytanie dobrze napisane i wysłane do serwera nic nam
nie pozostaje jak wyświetlenie wyników zapytania. Przykład:
$zapytanie = "SELECT `id`,`nazwisko`,`lata`,`punkty` FROM `nba`";
$idzapytania = mysql_query($zapytanie);
echo '<table>';
while ($wiersz = mysql_fetch_row($idzapytania)) {
echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td>'.<td>'.
$wiersz[2] .'</td><td>'. $wiersz[3] .'</td></tr>';
}
echo '<table>';
Istota tego kodu ukryta jest w funkcji mysql_fetch_row, która przy każdej
iteracji pętli while wyciąga dany wiersz zapytania i zapisuje go w tablicy $wiersz
indeksowanej od zera, wypełnionej elementami rekordu wybranymi za pomocą
zapytania. Czyli element o indeksie zero będzie równy wartości danego
rekordu pola id, element o indeksie jeden będzie równy wartości danego
rekordu pola nazwisko itd. Efektem powyższego kodu będzie wyświetlenie
tabeli z graczami oraz ich danymi.
Język SQL: aktualizacja rekordów
Jeśli jakiś rekord jest już nie aktualny, lub po prostu źle wpisaliśmy dane,
należałoby go zaktualizować, do czego służy polecenie SQL UPDATE:
UPDATE nazwa_tabeli SET nazwa_pola1=wartosc_pola1, nazwa_pola2=wartosc_pola2
[WHERE warunek]
Warunek podobnie jak w poleceniu SELECT jest nieobowiązkowy. Jeśli pominiemy
warunek to zaktualizowane zostaną wszystkie rekordy w tabeli a nie tylko
konkretne określone warunkiem WHERE. Po przecinkach określamy które pola i
jaką wartość muszą przyjmować. Rozpatrzmy przykład:
$zapytanie = "UPDATE `nba` SET `lata` = '14',`punkty` = '125' WHERE
`id`='1'";
$idzapytania = mysql_query($zapytanie);
Po wykonaniu powyższego zapytania rekord o identyfikatorze równym 1 zostanie
zaktualizowany a dokładniej dwa pola: lata i punkty.
Język SQL: usuwanie rekordów
Jeśli jakieś rekordy z danej tabeli już nas nie interesują pozbywamy się ich
poleceniem DELETE:
DELETE FROM nazwa_tabeli [WHERE warunek]
Podobnie jak w przypadku SQLowskiego zapytania SELECT i UPDATE jeśli nie
podanym warunku WHERE efekt naszego zapytania będzie dotyczył wszystkich
rekordów w danej tabeli. Jeśli pominiemy warunek WHERE w zapytaniu DELETE
będzie to równoznaczne z wyczyszczeniem całej tabeli. Rozpatrzmy kolejny
przykład:
$zapytanie = "DELETE FROM `nba` WHERE `nazwisko`='Pipen'";
$idzapytania = mysql_query($zapytanie);
Po wykonaniu powyższego kodu w tabeli nba nie znajdzie się nikt o nazwisku
Pipen.
Podsumowanie
Jeśli czytałeś(łaś) kurs uważnie to umiesz już wykonywać podstawowe
zapytania do bazy danych i wyświetlać jej treść. Zapraszam do kolejnej
części artykułu gdzie nauczysz się budować bardziej skomplikowane warunki i
sortować wyniki zapytań.
Trochę kodu
// połączenie się lokalnym serwerem bazy MySQL
$sql_conn = mysql_connect('localhost', 'admin', 'passwd')
// w przypadku niepowodzenia połączenia zakończ aplikację
or die('Nie mogłem połaczyć się z bazą danych');
// jeśli nie mamy jeszcze bazy to musimy ją utworzyć
mysql_create_db('zawodnicy');
// wybieramy bazę danych
mysql_select_db('zawodnicy');
$idzapytania = mysql_query($zapytanie);
// tworzymy tabelę nba
$zapytanie = 'CREATE TABLE nba (id int NOT NULL AUTO_INCREMENT, imie
char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id))';
// dodajemy troche przykładowych danych
$zapytanie = "INSERT INTO `nba` (`id`, `nazwisko`, `lata`, `punkty` , `mistrzostwa`)
VALUES ('', 'Jordan', '13', '258', '48')";
$idzapytania = mysql_query($zapytanie);
$zapytanie = "INSERT INTO `nba` (`id`, `nazwisko`, `lata`, `punkty` , `mistrzostwa`)
VALUES ('', 'Pipen', '10', '123', '32')";
$idzapytania = mysql_query($zapytanie);
$zapytanie = "INSERT INTO `nba` (`id`, `nazwisko`, `lata`, `punkty` , `mistrzostwa`)
VALUES ('', 'O\'Neal', '10', '205', '50')";
$idzapytania = mysql_query($zapytanie);
// wyświetlamy treść naszej tabeli
$zapytanie = "SELECT `id`,`nazwisko`,`lata`,`punkty` FROM `nba`";
$idzapytania = mysql_query($zapytanie);
echo '<table>';
while ($wiersz = mysql_fetch_row($idzapytania)) {
echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td>'.<td>'.
$wiersz[2] .'</td><td>'. $wiersz[3] .'</td></tr>';
}
echo '<table>';
// zamykamy połączenie
mysql_close($sql_conn);
|
|
|
|