Studio projektowe
 



<<< Powrót


 

PHP i MySQL

                 Język PHP umożliwia łączenie się z wieloma bazami danych nie tylko z MySQL, można tutaj wymienić chociażby PostgreSQL, ORACLE, SQL, MS SQL, SQLite i pewnie wiele innych. W pracy nad stronami internetowymi nie używa się większości z tych baz, poza tym składnia odczytywania i zapisywania danych w bazie jest bardzo podobna w przypadku każdej bazy. Pokażę wam jak bardzo proste jest korzystanie z bazy danych na przykładzie MySQL. Przedtem jednak wrócę do aplikacji EasyPHP za pomocą której, bardzo wygodnie i bez obaw można ćwiczyć administrowaniem bazą MySQL.

                 Zakładam że program EasyPHP jest zainstalowany na twoim komputerze. Najlepiej jeśli Instalacja przeprowadzona została bez naszej ingerencji, tzn. bez zmiany katalogu instalacyjnego. BARDZO WAŻNE!!! Aby wykonać wszystkie operacje które za chwile opisze program EasyPHP musi być włączony (w prawym dolnym rogu powinna pojawić się ikonka „e” z mrugającym czerwonym prostokątem). Jeśli podczas włączania pojawi się jakiś komunikat to bezwzględnie trzeba zwrócić na niego uwagę. Bardzo typowym komunikatem który może się pojawić jest „Apacze port (80) is used by Skype.exe” oznacza to, że masz włączonego Skype’a a on domyślnie pracuje na porcie 80 i tym samym blokuje aplikację Apache’a. Rozwiązaniem tego problemu jest abyś wyłączył na chwilą komunikator, kliknij na ikonkę „e” dwukrotnie przyciśnij przycisk Apache i wybierz z menu „Start”. Teraz serwer będzie działał. Nie ma problemu żebyś włączył Skype’a z powrotem, nie obawiaj się błędów, tym razem zostanie wybrany inny port.

                 Aby poraz pierwszy połączyć się do serwera bazy, użyjemy wiersza poleceń systemu Windows. Najlepiej gdyby był to system XP albo 2000 ale na starszych windziach też powinno działać. Uruchamiamy wiersz poleceń, a następnie przechodzimy do katalogu c://program files/easyphp1-8/mysql/bin. Możesz uczynić to bardzo szybko wpisując komendę:

 cd "c://program files/easyphp1-8/mysql/bin"

 a następnie naciskając “enter”. Teraz aby połączyć się z serwerem musimy uruchomić aplikację klienta MySQL z odpowiednimi parametrami. Dla twojego lokalnego serwera aby połączyć się z bazą danych wystarczy wpisać komędę:

 mysql -u root

 a następnie enter. Powinieneś zobaczyć na konsoli następujący komunikat:

 Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.9-max
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

  

Oznacza to że wszystko poszło bardzo sprawnie a ty możesz teraz wprowadzać zapytania do serwera. Parametr, który podałeś przy łączeniu „-u root” oznacza, że jesteś użytkownikiem root. Po procesie instalacji MySQL jest to pierwszy i jedyny użytkownik tej bazy. Jest to administrator, który ma uprawnienia do wykonania wszelkich zmian. Domyślnie użytkownik ten nie posiada hasła. Bardzo częstym parametrem którego używa się przy połączeniu do bazy jest „-h host” i „-p hasło”, czyli nazwa hosta oraz hasło. W naszym pierwszym połączeniu nie użyliśmy tych parametrów, ponieważ jeśli pracujemy na hoście lokalnym, to jest on domyślnie ustawiany. Oczywiście nie ma problemu gdybyśmy napisali : mysql -u root –h localhost, połączylibyśmy się do bazy.

                 Skoro jesteśmy już połączeni z bazą danych możemy tworzyć bazy danych, wprowadzać zapytania do bazy, możemy zmienić parametry użytkownika, dodać hasło dla root’a określić prawa dostępu i wiele innych, ale to nie czas i miejsce aby o tym wszystkim mówić. Skupimy się na tym co najważniejsze, czyli jak korzystać z MySQL w PHP. Podstawowymi operacjami jakimi będziemy się posługiwać są zapytania do naszej bazy. Jak utworzyć NASZĄ bazę? MySQL po zainstalowaniu posiada tylko jedną domyślnie utworzoną bazę danych o nazwie ”mysql” możemy jej używać ale po co skoro lepiej jest mieć własną :) Tworzymy zatem nową bazę danych o nazwie „dom”:

 mysql>create database dom;

  W wierszu poleceń znak średnika jest konieczny dla zamknięcia zapytania. Na wskutek powyższego zapytania, serwer utworzy nam nową bazę danych o nazwie „dom”. Aby zobaczyć, że baza rzeczywiście została utworzona wpiszmy komendę:

 mysql>show databases;

 Na ekranie pojawi na się tabelka ze wszystkimi istniejącymi bazami danych. Skoro utworzyliśmy bazę to teraz możemy do niej wejść, robimy to komendą:

 mysql>use dom;

 Jesteśmy w bazie a więc przydałyby się jakieś tabelki… powiedzmy że nasz „dom” będzie się składał z pokoi w których znajdują się jakieś sprzęty. Stwórzmy zatem pierwszą tabelką „mój_pokoj”:

create table moj_pokoj

(
   id_pokoju  int AUTO_INCREMENT    not null,

   nazwa_sprzetu   text,
   kolor           text,
  
data_zakupu     text,
   primary key (id_pokoju)
);

 Skopiuj powyższą formułę a następnie naciśnij „enter”. Nie przejmuj się tym, że całość nie jest napisana w jednej linii serwer wykona całość dopiero wtedy gdy natrafi na znak średnika. Jeśli wszystko zostało wprowadzone prawidłowo powinieneś zobaczyć komunikat „Query OK, 0 rows affected (0.05 sec)”. Oznacza to że serwer zrozumiał nasze żądanie i utworzył tabelę.

 Kolejną bardzo ważną formułą, którą używał będziesz najczęściej jest wprowadzanie danych do tabeli. Dokonuje się tego za pomocą instrukcji „insert” – wprowadź. Zakładamy, że nasz pokój będzie posiadał telewizor i radio, Wprowadźmy zatem dane:

 mysql> insert into moj_pokoj values(NULL, "telewizor", "czarny", "12 maja 2000r");

mysql> insert into moj_pokoj values(NULL, "radio", "srebro", "12 maja 2000r");

 Nasz pokój posiada teraz radio i telewizor, ale jak to sprawdzić czy rzeczywiście? Wypiszmy zawartość tabelki na ekranie.

 mysql> select * from moj_pokoj;

+-----------+---------------+--------+---------------+
| id_pokoju | nazwa_sprzetu | kolor  | data_zakupu   |
+-----------+---------------+--------+---------------+
|         1 | telewizor     | czarny | 12 maja 2000r |
|         2 | radio         | srebro | 12 maja 2000r |
+-----------+---------------+--------+---------------+

2 rows in set (0.03 sec)

 Zauważ, że w kolumnie id_pokoju znajdują się wartości zgodne z kolejnością wprowadzania, zaniepokoić mogło cię również to, że w momencie wprowadzania danych pierwsza wartość jest równa „NULL” (Zero). Dlaczego, skoro wprowadziłem wartość NULL w kolumnie pojawiają się wartości? To wszystko dzięki specjalnie zadeklarowanej zmiennej id_pokoju, jest ona typu int z argumentem „AUTO_INCREMENT not null”, czyli zmienna ta jest nie powtarzająca się oraz automatycznie inkrementowana (zwiększana) o +1 przy kolejnym wprowadzaniu. Jest to bardzo ważne w momencie gdy już będziesz budował swoją relacyjną bazę danych. Teraz jest to dla nas o tyle ważne, że każdy z wprowadzonych przedmiotów ma unikalny numer id za pomocą którego odnajdziemy go w bazie. Problem może wydawać ci się nieistotny w momencie, kiedy zainteresowany jesteś tylko podstawowymi funkcjami obsługującymi MySQL, ale wyobraź sobie sytuację, że w twoim pokoju znajdują się dwa identyczne radia kupione w tym samym czasie. Bez przypisanego do tych przedmiotów ID-ków system jaki będzie chciał je odczytać potraktuje przedmioty jako klony, uwierz mi że to katastrofa. Zakoduj sobie dobrą manierę, że przy tworzeniu tabel powinieneś zawsze deklarować zmienną ID.

  

Podstawowe funkcje obsługi MySQL w PHP

                 Jeśli przebrnąłeś z powodzeniem przez powyższe instrukcje to myślę, że bardzo szybko nauczysz się obsługi MySQL w PHP. Wyobraź sobie że język PHP jest pewnego rodzaju aplikacją klienta bazy MySQL. Tak jak w wierszu poleceń, procedura obsługi bazy danych jest taka sama czyli najpierw łączymy się do serwera, następnie wybieramy bazę danych, po czym możemy wprowadzać i zapisywać dane do bazy. Zobaczmy to na przykładzie.

 <?php

$link = mysql_connect ("localhost", "root", "") or die ("Nie mozna sie polaczyc z baza danych");

mysql_select_db ("dom") or die ("Nie mozna wybrac bazy danych");

 

$query = "insert into moj_pokoj values ( NULL, 'radio', 'srebro','12 maja 2000r')";

mysql_query($query) or die ("Wystąpiły problemy przy zapisywaniu danych");

 

print "dane zapisane";

?>

Powyższy skrypt realizuje wszystkie funkcje, które opisaliśmy wyżej. Aby sprawdzić działanie skryptu zapiszmy go na naszym lokalnym serwerze Apache’a jako np.: test.php (Dla zapominalskich podpowiem, że folder w którym należy umieścić plik znajduje się w C:\Program Files\EasyPHP1-7\www). Otwórz przeglądarkę i wpisz adres http://localhost/test.php, jeśli zrobiłeś wszystko poprawnie powinieneś zobaczyć tekst „dane zapisane”. Przejdź teraz do konsoli (wiersz poleceń) i wypisz dane z naszego pokoju.

 mysql> select * from moj_pokoj;

+-----------+---------------+--------+---------------+
| id_pokoju | nazwa_sprzetu | kolor  | data_zakupu   |
+-----------+---------------+--------+---------------+
|         1 | telewizor     | czarny | 12 maja 2000r |
|         2 | radio         | srebro | 12 maja 2000r |
|         3 | radio         | srebro | 12 maja 2000r |
+-----------+---------------+--------+---------------+

3 rows in set (0.00 sec)

 Nasz skrypt wykonał zadanie, połączył się do serwera MySQL, wybrał bazę i zapisał w tabeli nowe dane. Przeanalizujmy zatem ten skrypt. Zawiera on trzy najważniejsze, z punktu widzenia obsługi bazy, funkcje, mianowicie: mysql_connect(), mysql_select_db(), mysql_query(). Pierwsza z nich służy, jak łatwo się domyślić, do łączenia. Argumenty które musimy podać jest nazwa hosta, użytkownik oraz hasło użytkownika. Druga funkcja wybiera bazę, na której będziemy działać, a trzecia umożliwia nam wysyłanie zapytań. W przypadku wprowadzania danych do bazy (instrukcja „INSERT …”), funkcja zwraca wartość TRUE lub FALSE, w zależności czy udało się wprowadzić nowe dane czy nie. Natomiast w przypadku zapytań do bazy takich jak „SELECT * FROM mój_pokoj”, funkcja w odpowiedzi zwróci DANE, które odczytać będziemy mogli w zadanej postaci np. jako tablicę wynikową.

 Spróbujmy zatem odczytać dane z naszej tabelki. Umożliwi nam to poniższy skrypt:

 <?php

$link = mysql_connect ("localhost", "root", "") or die ("Nie mozna sie polaczyc z baza danych");

mysql_select_db ("dom") or die ("Nie mozna wybrac bazy danych");

$query = "SELECT * FROM moj_pokoj";

$dane = mysql_query($query) or die ("Wystąpiły problemy przy zapisywaniu danych");

while ($wiersz_danych = mysql_fetch_row($dane))

{

      for ($i=0;$i<count($wiersz_danych);$i++)

      print $wiersz_danych[$i]." ";

      print "<Br>";

}

?>

 Skrypt jest bardzo podobny do poprzedniego. Różnica polega na tym, że w przypadku pobierania danych funkcja mysql_query() nie wypisze rezultatu na ekranie, musimy to zrobić sami poprzez odpowiednie przekształcenie wyniku zapytania. Bardzo przydatną i często używaną w tym celu funkcją jest mysql_fetch_row() zwraca ona w wyniku jeden wiersz danych w postaci tablicy X elementowej gdzie X to liczba naszych kolumn. Jak działa ta funkcja? Ano bardzo spłytnie. Pierwsze wywołanie tej funkcji odczyta pierwsza linię, drugie drugą itd…. Przy pomocy pętli for wypisaliśmy dane z tablicy i to by było na tyle :)

 To zaledwie podstawy twojej przygody z bazami danych, prześledź całą listę funkcji MySQL w PHP na http://programowanie.celary.net/php/index.php?temat=ref.mysql.html.