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 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.
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'.
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.
Autor: