Współpraca PHP i MySQL Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z danych zapisanych na serwerze jest współpraca z relacyjna bazą danych. Baza taka składa się z tabel powiązanych ze sobą relacjami, które pozwalają na logiczne łączenie danych z różnych tabel.
Tworzenie bazy danych Aby utworzyć bazę na lokalnym komputerze musimy zainstalować specjalne oprogramowanie np. XAMPP. Po zainstalowaniu włączamy Apache i MySQL.
Gdy już nasza baza będzie aktywna, klikamy w przycisk „Admin” i czekamy aż uruchomi się PhpMyAdmin.
PhpMyAdmin jest narzędziem, pozwalającym zarządzać bazą danych MySQL, która została utworzona na serwerze. Program ten zapewnia realizacje wszystkich podstawowych funkcji: tworzenie i usuwanie tabel, umieszczanie rekordów (także z przygotowanego wcześniej pliku) oraz administrację bazą.
Tworzenie nowego użytkownika bazy Klikamy w User accounts (użytkownicy) Dodajemy nowego użytkownika
Tak wygląda dodany użytkownik Uzupełniamy pola Imię Nazwa hostingu. Nasz to localhost Hasło Niżej nadajemy odpowiednie uprawnienia i potwierdzamy dodanie użytkownika. Tak wygląda dodany użytkownik
W celu polaczenia się z bazą danych należy stworzyć bazę, utworzyć w niej tabele oraz wprowadzić dane. PhpMyAdmin udostępnia zakładkę SQL, w której istnieje możliwość wprowadzenia ciągu instrukcji w języku MySQL, pozwalających za jednym razem utworzyć prostą strukturę bazy.
Dodawanie bazy i tabel Wpisujemy CREATE DATABASE nazwa_bazy; Pozytywne dodanie nowej bazy
Wprowadzanie danych do tabeli poprzez instrukcje w języku MySQL Nasza instrukcja CREATE TABLE filmy { ID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID), Tytul VARCHAR(35), Rezyser VARCHAR(35), Czas INT); INSERT INTO filmy VALUES (NULL, „Pan Tadeusz”, „A. Wajda”, 207); INSERT INTO filmy VALUES (NULL, „Matrix”, „A. Wachowski”, 196); INSERT INTO filmy VALUES (NULL, „Shrek”, „A. Adamson”, 150);
Pojawiła nam się nowa tabela „filmy”
Opis instrukcji W pierwszej linijce nakazujemy utworzenie tabeli o podanej nazwie. Nawias rozpoczyna definicję jej struktury. Przyjrzyjmy się zatem poszczególnym polom: id - pole to będzie przechowywało liczbowy, jednoznaczny identyfikator rekordu. Dwa rekordy nie mogą posiadać tego samego ID. Pole to powinny posiadać w zasadzie wszystkie tabele, gdyż jest ono podstawą relacji oraz systemów zarządzania bazą. Parametry to: INT - typ liczbowy NOT NULL - pole nie może być puste AUTO_INCREMENT - MySQL automatycznie będzie dbał o nadawanie nowo dodawanym rekordom kolejnych ID. PRIMARY KEY - klucz główny określający przeznaczenie tego pola jako podstawy do identyfikacji rekordów. tytul - tutaj będziemy umieszczali tytuł filmu. rezyser - tutaj będziemy umieszczali imię i nazwisko reżysera. Parametry to: VARCHAR(35) - typ tekstowy. Maksymalna długość to 35 znaków. Czas - tutaj będziemy umieszczali długość filmu w minutach. Parametry to: INT - liczba czterobajtowa. Wartości od -2147483648 do 2147483647, a bez znaku od 0 do 4294967294.
Dodawanie rekordów: INSERT INTO filmy VALUES (NULL, "Pan Tadeusz", "A. Wajda", 207); INSERT INTO filmy VALUES (NULL, "Matrix", "A. Wachowski", 196); INSERT INTO filmy VALUES (NULL, "Shrek", "A.Adamson", 150); Aby dodać rekord do tabeli, należy wysłać zapytanie INSERT. Ma ono generalnie dwie możliwe składnie: INSERT INTO `tabela` VALUES('Wartość pola 1', 'Wartość pola 2', 'Wartość pola 3'); INSERT INTO `tabela` (`pole1`, `pole2`, `pole3`) VALUES('Wartość pola 1', 'Wartość pola 2', 'Wartość pola 3'); Oba powodują utworzenie nowego rekordu w podanej tabeli, lecz istnieje między nimi pewna różnica. W pierwszym zapytaniu musimy bezwzględnie podać wartości wszystkich pól nowego rekordu, jakie mamy zdefiniowane w strukturze tabeli, w identycznej kolejności. Drugie zapytanie pozwala nam w pierwszym z nawiasów wymienić listę pól, jakie nas interesują i dopiero potem podać ich wartości. W praktyce znacznie częściej używa się właśnie jego, gdyż nie trzeba podawać wartości pól ID, które nadawane są przez bazę automatycznie.
Mając bazę danych wypełnioną danymi, można przystąpić do wykonania połączenia z poziomu języka PHP. W przypadku instrukcji połączenia z bazą, wyboru bazy i wykonania zapytania warto wprowadzić dodatkową konstrukcję or die(), która w przypadku niepowodzenia pierwszej instrukcji wyprowadzi w oknie strony informacje tekstową i przerwie działanie skryptu.
Połączenie z bazą danych i pobieranie danych
Opis całego kodu $polaczenie=mysql_connect("localhost", "Dominik", "zadanie") Łączenie z bazą Tworzenie zmiennej połączenie Nazwa hostu Klient Hasło klienta or die("Brak połaczenia z serwerem MySQL"); Podczas niepowodzenia wyskakuje komunikat mysql_select_db("baza_filmow",$polaczenie) Ustawia aktywną bazę danych na serwerze określonym przez podany identyfikator połączenia. Kolejne wywołania funkcji mysql_query() będą dotyczyły aktywnej bazy danych. $zapytanie="Select * FROM filmy"; Utworzenie zmiennej zapytanie która wybiera wszystkie kolumny z tabeli filmy.
mysql_query() zwraca identyfikator wyniku (lub FALSE w przypadku niepowodzenia) jedynie dla zapytań typu SELECT, SHOW, EXPLAIN i DESCRIBE. Dla innych zapytań SQL mysql_query() zwraca TRUE lub FALSE informując czy zapytanie zakończyło się sukcesem czy też nie. Jeśli nie została zwrócona wartość FALSE to znaczy, że zapytanie było prawidłowe i może być wykonane przez serwer. Nie mówi natomiast nic o liczbie przetworzonych lub zwróconych wierszy. Jest również możliwe, że zapytanie zostanie wykonane poprawnie, nie przetwarzając lub zwracając żadnych wierszy. Tworzenie zmiennej wynik $wynik=mysql_query($zapytanie) or die("Wystąpiły problemy przy zapisywaniu danych");
while ($wiersz_danych = mysql_fetch_row($wynik)) { for ($i=0;$i<count($wiersz_danych); $i++) print $wiersz_danych[$i].". "; print"<br>"; } mysql_close($polaczenie); 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_danych 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 tytuł itd. Efektem powyższego kodu będzie wyświetlenie tabeli z wszystkimi kolumnami tzn. Tytuł, autor i czas filmu. mysql_fetch_row - To najczęściej używana funkcja czytająca jeden wiersz odpowiedzi. Z wiersza tego tworzona jest tablica, której kolejne elementy o kluczach 0, 1, 2... zawierają wartości z kolejnych kolumn tabeli SQL wybranych zapytaniem (w naszym przypadku $wynik). print $wiersz_danych[$i].". "; -Polecenie print wypisuje dane z tablicy wg pola ID (0,1,2,3…). mysql_close($polaczenie) - zamyka nie stałe połączenie do serwera MySQL, które zostało skojarzone z podanym identyfikatorem połączenia.
Efekt naszej pracy Jeżeli wszystko zrobiliśmy zgodnie z instrukcjami to na stronie powinna się wyświetlić cała tabela filmy z baza_filmów.
Pobieranie danych z bazy do tabeli W naszym kodzie pojawi się instrukcja mysql_fetch_assoc() array mysql_fetch_assoc ( resource $wynik ) Zwraca tablicę zawierającą pobrany wiersz, lub FALSE jeżeli nie ma więcej wierszy w wynik. Użycie mysql_fetch_assoc() jest równoznaczne z wywołaniem mysql_fetch_array() podając jako drugi argument MYSQL_ASSOC. Zwraca jedynie tablicę asocjacyjną. Początkowo tak właśnie zachowywała się funkcja mysql_fetch_array(). Jeśli oprócz indeksowania asocjacyjnego potrzebujesz także numeryczne, użyj funkcji mysql_fetch_array(). Jeżeli dwie lub więcej kolumn wyniku ma te same nazwy, ostatnia kolumna będzie brana pod uwagę. Dostęp do innych kolumn o tej samej nazwie jest możliwy przy użyciu funkcji mysql_fetch_array(), która wprowadzi również indeksowanie numeryczne.
Opis kodu na poprzednich stronach <?php $polaczenie=mysql_connect("localhost", "Dominik", "zadanie") or die("Brak połaczenia z serwerem MySQL"); mysql_select_db("baza_filmow",$polaczenie) or die("Bład wyboru bazy danych"); $zapytanie="Select * FROM filmy"; $wynik=mysql_query($zapytanie) or die("Wystąpiły problemy przy zapisywaniu danych"); echo "<table cellpadding=\"2\" border=1 width='400px'>"; echo "<tr> <th colspan='3' bgcolor='#00FFFF'>Filmy</th></tr>"; echo "<tr>"; echo "<td bgcolor='#AAF9FA' align='center'><b>Tytuł</b></td>"; echo "<td align='center'><b>Reżyser</b></td>"; echo "<td align='center'><b>Czas</b></td>"; echo "</tr>"; while($r = mysql_fetch_assoc($wynik)) { echo "<td align='center' bgcolor='#AAF9FA'>".$r['tutul']."</td>"; echo "<td align='center' nowrap='nowrap'>".$r['rezyser']."</td>"; echo "<td align='center'>".$r['czas']."</td>"; } echo "</table>"; mysql_close($polaczenie); ?> Opis kodu na poprzednich stronach Tworzenie prostej tabeli Wypisywanie danych za pomocą funkcji mysql_fech_assoc. Zamknięcie tabeli i zerwanie połączenia z bazą.
Jeżeli wszystko dobrze napisaliśmy otrzymamy taką tabelkę na naszej stronie.
Dodawanie nowych wierszy do naszej bazy w celu sprawdzenia czy wszystko działa. Pierwszy wiersz Drugi wiersz
A oto efekt. Wszystko działa ;)
Dziękuję za uwagę. Dominik Siwek Zespół Szkół Ponadgimnazjalnych w Ryglicach