Podstawy MySQL'a - cz.1
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 ( pod Win32 )
Instalacja nie sprawi najmniejszych problemów nawet 'zielonym' - wystarczy otworzyć zwykłym edytorem tekstu plik php3.ini (lub php.ini - w zależności od wersji PHP), następnie znaleźć linijkę ;extension=php3_mysql.dll i usunąć średnik, który znajduje się na początku linii. W ten sposób będziemy mogli korzystać z dobrodziejstw MySQL'a na serwerze Apache.
Zapytania
Aby wykonać cokolwiek w swojej bazie należy wysłać do niej informacje, wszystkie informacje wysyłane są do bazy danych w postaci zapytań, do czego służy funkcja mysql_query(zapytanie). Wszystkie zapytania wysyłamy w następujący sposób:
$zaptanie="twoje zapytanie";
$wykonaj=mysql_query($zapytanie);
Po takiej operacji zmienna $wykonaj będzie zawierać wartość TRUE, jeśli operacja powiedzie się, jeśli nie - zwróci wartość FALSE.
Łączymy się z bazą danych
Aby połączyć się z bazą danych używamy komendy:
mysql_connect (nazwa_hosta[:port] [, użytkownik] [,hasło]);
W praktyce oznacza to, że wymagana jest nazwa hosta - następnie opcjonalnie możemy wpisać nazwę użytkownika oraz jego hasło. Jeśli nie podamy nazwy hosta automatycznie nastąpi próba połączenia się z localhostem. Jeśli zabraknie nazwy użytkownika automatycznie zostaniemy zalogowani jako właściciel procesu baz danych, przeważnie właściciel nie ma ustawionego hasła, więc trzeci parametr nie jest wymagany. Poniższy przykład pokazuje jak połączyć się z serwerem mojserwer.pl jako użytkownik foo, z hasłem off:
$sql = mysql_connect (mojserwer.pl, foo, off);
Funkcja mysql_connect zwróci wartość TRUE, jeśli zakończy się sukcesem, jeśli nie powiedzie się - zwróci wartość FALSE.
Jeśli zakończyłeś już operacje w swojej bazie należy się rozłączyć, co robi się funkcją mysql_close(id_połączenia). Aby zakończyć połączenie, które zaprezentowałem powyżej należałoby zastosować komendę 'mysql_close' w następujący sposób:
Tworzenie nowej bazy oraz jej wybieranie
Do stworzenia nowej bazy używamy komendy mysql_create_db(nazwa) np.:
mysql_create_db("zawodnicy");
Samo stworzenie bazy nie oznacza, że właśnie na niej będziemy wykonywać operacje, dlatego musimy ją wybrać, co robimy komendą mysql_select_db(nazwa) np.:
mysql_select_db("zawodnicy");
Od tej pory można już wykonywać różne operacje w bazie 'zawodnicy'.
Zagadnienia SQL
Bazę danych możemy stworzyć także za pomocą wyrażeń SQL w formie zapytania:
$zapytanie="CREATE DATABASE zawodnicy";
$wykonaj = mysql_query($zaptanie);
Gdy nasza baza jest już utworzona możemy zacząć wprowadzać dane, najpierw jednak trzeba utworzyć tabelę, robimy to wg następującego schematu składni SQL:
CREATE TABLE nazwa_tabeli (nazwa1 typ1, nazwa2 typ2, PRIMARY KEY(nazwa_x))
Postarajmy się stworzyć tabelę według danego schematu:
$zapytanie = "CREATE TABLE nba (id char(3) NOT NULL, imie char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id))";
Rozpatrzmy powyższy przykład: klucz oznaczony jako PRIMARY KEY oznacza, że klucz ten jest kluczem głównym, a klucz główny nie może się powtarzać - w przypadku gdyby klucz główny się powtórzył po prostu rekord nie zostanie dodany do tabeli, klucz oznaczony jako NOT NULL nie może być pusty.
Dostępnych jest kilka typów pól, niektóre z nich 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 - ciąg znaków o długości ograniczonej przez twoją pamięć,
integer - liczba całkowita z zakresu od do ,
data - data w formacie DBMS (uwaga format odwrotny do normalnego: YYYY-MM-DD),
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.
Mamy już stworzoną tabelę, teraz trzeba coś do niej dodać, robimy to wg następującego schematu:
INSERT INTO nazwa_tabeli VALUES (wartosc_pola1, wartosc_pola2, wartosc_pola3...)
Nie zawsze musimy wypełniać wszystkich pól, a robi się to w następujący sposób:
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 VALUES(Jordan, 13, 32, 6)";
Po wykonaniu takiej operacji tabela 'nba' będzie już zawierać jednen rekord. Teraz kolejno możemy dodawać w ten sam sposób kolejne rekordy.
Jeśli chcemy przeszukać naszą tabelę w poszukiwaniu jakiegoś konkretnego rekordu robimy to za pomocą komendy SELECT wg schematu:
SELECT nazwa_pola FROM nazwa_tabeli WHERE warunek
Oczywiście nazw pól możemy podać kilka, lub wszystkie - jednak zamiast tego po prostu wstawiamy znak gwiazdki (SELECT * FROM itd.), warunek może być bardzo złożony, ale to jest temat na kolejny artykuł. Załóżmy, że chcemy przeszukać naszą tabelę w poszukiwaniu zawodnika o nazwisku 'Pipen' robimy to w następujący sposób:
$zapytanie = "SELECT imie FROM nba WHERE imie='Pipen'";
Funkcja zwróci wartość TRUE jeśli znajdzie w naszej tabeli Pipena, jeśli nie - FALSE. Pamiętaj jednak, że rozróżniane są wielkie i małe litery, dlatego 'Pipen' to nie to samo co 'pipen' czy 'PIPEN'...
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 komenda UPDATE:
UPDATE nazwa_tabeli SET wartosc_pola WHERE warunek
Powiedz my, że chcemy zmienić w naszej tabeli ile lat grał Jordan, robimy to tak:
$zapytanie = "UPDATE nba SET lata=15 WHERE imie='Jordan'";
Teraz Jordan grał już 15, a nie tak jak wcześniej 13 lat. Jeśli jakieś dane z danej tabeli już nas nie interesują pozbywamy się ich komendą DELETE:
DELETE FROM nazwa_tabeli [WHERE warunek]
W powyższym przykładzie warunek wziąłem w nawias, ponieważ jeśli nie podamy warunku z tabeli zostaną wymazane wszystkie rekordy. W praktyce kasowanie prezentuje się następująco:
$zapytanie = "DELETE FROM nba WHERE imie=Jordan";
Od tej chwili Jordana już nie ma w naszej tabeli zawodników nba.
Jak wyświetlić wyniki przeszukiwania tabeli?
Skoro poznaliście już podstawowe zagadnienia SQL'a to możemy przejść do bardziej zaawansowanych struktur - wyświetlanie wyników przeszukiwania tabeli. Wszystko odbywa się wg poniższego schematu:
$zapytanie = "SELECT * FROM nazwa_tabeli";
$wykonaj = mysql_query($zaptanie);
while($wiersz = mysql_fetch_array($wykonaj))
{
print "Pole pierwsze".$wiersz['pole1']."<br>";
print "Pole drugie".$wiersz['pole2']."<br>";
print "Pole trzecie".$wiersz['pole3']."<br>";
}
Wszystko to odbywa się dzięki komendzie 'mysql_fetch_array', której zadaniem jest pobieranie wierszy ze zbioru wyników i zwracanie jej w postaci tablicy. Oczywiście każda osoba znająca HTML'a i PHP zorientowała się, że zamiast pisać 'print' trzy razy, można by napisać tylko raz, ale napisałem tak dla przejrzystości kodu.