Podstawy PHP i MySQL
Temat 14 - Wstęp do baz MySQL
Powrót do spisu tematów


W tym rozdziale:

  1. Podstawowe zasady pracy z bazami danych
  2. £ączenie z serwerem baz z poziomu skryptu PHP
  3. Zakładanie nowej bazy z poziomu skryptu PHP
  4. Tworzenie tabel z poziomu skryptu PHP
  5. Problem kodowania polskich znaków
Kilka słów wstępu

Serwer baz danych umożliwia założenie i wykorzystanie bazy oraz dostęp do jej zasobów według zdefiniowanych uprawnień.
Każda z baz przechowuje dane w tabelach.
Tabele w bazach danych składają się z pól (kolumn) o określonej nazwie, oraz z rekordów (wierszy).
MySQL jest relacyjną bazą danych, co oznacza, że pola tabel są połączone ze sobą, co umożliwia zachowanie większego porządku przechowywanych danych oraz łatwiejszy do nich dostęp.

Korzystając z baz danych należy pamiętać o zasadzie jak najmniejszych uprawnień. Oznacza to, że jeżeli użytkownik w danym momencie ma przeglądać przechowywane dane, nie potrzebuje uprawnień administratora umożliwiających np. kasowanie danych.
Ze względów bezpieczeństwa nigdy nie pracujemy na koncie administratora (root).  

Projektując bazę danych należy przestrzegać zasady, aby nie wprowadzać w wielu miejscach tych samych danych.

£ączenie z serwerem baz z poziomu skryptu PHP

Skrypt, aby móc współpracować z serwerem baz, musi najpierw połączyć się z nim. Odbywa się to za pomocą funkcji mysq_connect(). Funkcja ta posiada trzy parametry:
- adres serwera baz,
- nazwa użytkownika,
- hasło użytkownika.

$url = "adres";
$identyfikator = "login";
$hasl = "haslo";
mysql_connect($url,$identyfikator,$hasl);

Funkcja mysql_connect() zwraca true, jeżeli uda się proces połączenia z serwerem baz, w przeciwnym wypadku zwraca wartość false. Warto w skrypcie sprawdzić efekt połączenia, gdyż jeżeli ono się nie powiedzie, nie ma sensu wykonywania kolejnych elementów skryptu, które korzystają z danych pobieranych z bazy.

$url = "adres";
$identyfikator = "login";
$hasl = "haslo";
if(!mysql_connect($url,$identyfikator,$hasl)
{
   echo'Nie udało się połączyć z serwerem baz.';
   exit();
}

Jeżeli skrypty znajdują się na tym samym komputerze, na którym pracuje serwer baz, jako adres serwera podaje się zwykle localost.

Zakładanie nowej bazy z poziomu skryptu PHP

Założenie bazy możliwe jest tylko wtedy, gdy użytkownik wykorzystany do połączenia ma takie uprawnienia. Założenie bazy nie będzie również możliwe, jeżeli baza o takiej nazwie już istnieje.

<?php
$url = "adres_serwera";
$identyfikator = "nazwa_użytkownika_bazy";
$hasl = "hasło_użytkownika_bazy";
if(!mysql_connect($url,$identyfikator,$hasl))
{
    echo'Nie udało się połączyć z serwerem baz.';
    exit();
}
$nazwa="nazwa_zakładanej_bazy";
$zapytanie="CREATE DATABASE $nazwa";
if(!mysql_query($zapytanie))
{
    echo"Nie udało się założyć bazy danych o nazwie $nazwa<br>
    Sprawdź, czy baza o takiej nazwie już nie istnieje. ";
}else{
    echo"Baza o nazwie $nazwa<br>
    została założona. ";
};
echo'</center></BODY>
</HTML>
';
?>

ćwiczenie 14_01 - Zakładanie bazy z poziomu skryptu PHP

  1. Należy umieścić na domowym serwerze WWW plik 14_01.php (do pobrania tutaj 14_01.zip)
  2. Należy ustawić parametry połączenia z serwerem baz (miejsca xxx) w pliku 14_01.php
  3. Należy uruchomić plik 14_01.php (przez http).
  4. Należy uruchomić powtórnie ten sam plik - efektem działania skryptu powinien być komunikat o niepowodzeniu procesu zakładania bazy
  5. Należy sprawdzić (narzędzie PHPMyAdmin), czy została założona baza o zadeklarowanej w skrypcie nazwie.

Chcąc pracować z tabelą i danymi przechowywanymi w bazie należy po połączeniu z serwerem baz wyselekcjonować odpowiednią bazę, czyli wskazać, do której bazy mają być wysyłane zapytania.

mysql_select_db($nazwa_bazy);

Mając dostęp do bazy oraz odpowiednie uprawnienia można zakładać tabele przechowujące dane. Umieszczając, a następnie wyświetlając polskie znaki diakrytyczne spotkamy się z problemem ich kodowania.

Tworząc tabele należy ustalić nazwy pól oraz określić charakter przechowywanych zmiennych.
Najważniejsze rodzaje pól:

  • int - liczby całkowite (należy zadeklarować długość pola, czyli liczbę znaków)

  • date - data w formacie rok-miesiąc-dzień

  • time - czas w formacie godzina:minuty:sekundy

  • datetime - data i czas w formacie rok-miesiąc-dzień godzina:minuty:sekundy (odpowiednik funkcji date("Y-m-d H:i:s")

  • char - łańcuch znaków o określonej długości

  • tinytext - krótki tekst

  • text - długi tekst

  • longtext - bardzo długi tekst

Aby uniknąć problemów z zapisem i odczytem polskich znaków, można skorzystać z następujących ustawień ich kodowania:

  • Kodowanie strony, która obsługuje bazę MySQL - UTF 8
    Informacja o kodowaniu polskich znaków na stronie internetowej powinna wyglądać następująco:

    <head>
    <meta http-equiv="Content-Language" content="pl">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>

    Pisząc więc kod HTML z kodowaniem UTF-8 należy korzystać z programu obsługującego ten standard kodowania (może to być program KED opisany w dodatku).
     

  • Połączenie z bazą w standardzie - UTF8
    Po połączeniu z serwerem baz przed wyselekcjonowaniem bazy należy umieścić następujący wpis:

    mysql_query('SET NAMES \'utf8\'');
     

  • System porównań dla pól tekstowych w bazie MySQL - utf8_polish_ci
    Tworząc w tabelach pola tekstowe system porównań można ustalić następująco:

    nazwa_pola TINYTEXT CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL ,

Kod odpowiedzialny za zakładanie tabeli może więc wyglądać następująco:

$tabela='nazwa_tabeli';
$zapytanie = "CREATE TABLE $tabela ( ".
"id int(11) NOT NULL auto_increment, ".
"imie TINYTEXT CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , ".
"nazwisko TINYTEXT CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , ".
"data datetime NOT NULL, ".
"mail TINYTEXT CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , ".
"PRIMARY KEY (id), ".
"UNIQUE id (id) ".
")";
if(mysql_query($zapytanie))
{
   echo"Założono tabelę $tabela<br>";
}else{
   echo"<font color=red>Nie udało się założyć tabeli $tabela</font><br>";
};

W powyższym przykładzie zostanie założona tabela o zadeklarowanej nazwie składająca się z 5 pól (id, imie, nazwisko, data, mail).
Pierwsze pole "id" będzie przeznaczone na umieszczenie kolejnego numeru rekordu. Nie musimy martwić się o numerowanie nowych rekordów, zapewnia to parametr auto increment. Przypisane numery będą niepowtarzalne UNIQUE id (id), nawet jeżeli któryś rekord zostanie usunięty, numer tego rekordu nie zostanie już wykorzystany.
Rodzaj tego pola  to int (liczby całkowite) o długości 11 znaków (powinno wystarczyć nawet dla bardzo obszernej bazy).

Parametr NOT NULL oznacza, że pola te nie będą nigdy puste. Ustawienie takie wspomaga wydajność bazy.

Primary Key(id) oznacza, iż pole id będzie kluczem głównym.

ćwiczenie 14_02 - Tworzenie tabel z poziomu skryptu PHP

  1. Należy umieścić na swoim koncie WWW pliki 14_02.php (do pobrania tutaj 14_02.zip)
  2. Należy ustawić parametry połączenia w pliku 14_02.php (linie 66 i 67)
  3. Należy zwrócić uwagę na wykorzystanie funkcji odpowiedzialnej za wywołanie powtarzającego się kodu
  4. Należy uruchomić plik 14_02.php (przez http).
  5. Należy sprawdzić (narzędzie PHPMyAdmin), czy została utworzona tabela.

Do zapamiętania

  1. Skrypt współpracujący z bazą danych MySQL powinien:
    - połączyć się z serwerem baz,
    - wyselekcjonować odpowiednią bazę.
  2. Ze względów bezpieczeństwa nie łączymy się skryptami z bazą korzystając konta administratora (root)

 


Powrót do spisu tematów