Obsługa MySQL w php
Praktycznie nie wyobrażamy sobie serwisu bez informacji czy treści na nim zamieszczonych. W zależności od tego jak często takie treści są wprowadzane można je umieścić statycznie, czyli osadzić bezpośrednio w HTMLu lub, jeżeli mamy zamiar je dosyć często wymieniać należy umieścić je gdzieś, gdzie będzie można je zmienić o wiele łatwiej, a najlepiej w sposób nie ingerujący w kod witryny. Do wyboru mamy 2 sposoby. Pierwszym jest osadzanie wszystko w plikach, a następnie odczytywanie tych plików przy użyciu php, lecz nie sprawdzi się to zbytnio, jeżeli chcemy trzymać wiele danych mało związanych ze sobą np. Loginy oraz artykuły. Oczywiście można tworzyć wiele plików, a następnie do nich złożony system odczytu ale, jeżeli wynaleziono koło już raz to nie ma sensu starać się tego robić ponownie.
Tym krótkim wstępem zapraszam do poradnika związanego z podstawową obsługą zapytań MySQL w php, nie jest to poradnik o tworzeniu bazy MySQL ani stawianiu serwera, więc liczę, że te umiejętności macie już opanowane,
wymagana jest także umiejętność pisania zapytań MySQL.
Łączenie się z bazą
Na samym początku musimy umiejętnie połączyć się z naszą bazą, służy do tego funkcja
Kod PHP:
mysql_connect('host', 'uzytkownik', 'haslo');
Hostem jest nasz host z którym się łączymy, najczęściej będzie to localhost. Użytkownik jest użytkownikiem z uprawnieniami odpowiednimi do przeglądania bazy, oczywiście hasłem jest hasło użytkownika, jeżeli jakieś ustawimy w przeciwnym wypadku pozostawiamy puste miejsce.
Wielu początkujących webmasterów ma problemy z polskimi znakami dialektycznymi (ą,ę,ć,ź,ń,ł,ó,ż). Specjalnie dla nich mam poradę jak sobie z tym poradzić. Ustawiając wartości tekstowe w bazie należy ustawić jako Metoda porównywania napisów "utf8_unicode_ci", następnie podczas tworzenia i zapisywania własnych skryptów nie zapominać o ustawianiu w htmlu znacznika odpowiedzialnego za kodowanie
Kod:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
w sekcji head, oraz zapisu pliku w kodowaniu UTF-8 (najlepiej without bom). Można to zrobić w notepad++ wybierając w menu Format > konwertuj na format UTF-8 bez BOM.
Pozostaje nam tylko dodać po połączeniu się zapytanie ustawiające wypuszczane odpowiedzi z serwera na zgodne z naszym kodowaniem następującą funkcją
Kod PHP:
mysql_query("SET NAMES utf8;");
Należy pamiętać także o tym, aby po wykonaniu wszystkich operacji z baza danych zamknąć połączenie funkcją
musimy tutaj posiadać uchwyt połączenia z bazą danych zapisany w zmiennej, więc poprawne połączenie i rozłączenie z bazą wygląda następująco
Kod PHP:
$connect = mysql_connect('localhost', 'root', '');
mysql_close($connect);
Wybieranie bazy danych
Połączyliśmy się już z serwerem, więc pora wybrać bazę na której chcemy pracować. Służy do tego funkcja
baza jest nazwą naszej bazy danych.
Tworzenie zapytań MySQL
Ogólnie wyróżniamy zapytania, które mają na celu nam podać informacje z bazy danych oraz zapytania, które mają tą bazę danych w jakiś sposób zmienić np. przez dodanie rekordu, edycję bądź usunięcie go.
Krótko o MySQL, nie będę tutaj rozpisywać się o podstawach tego języka, lecz spróbuje szybko streścić jego najważniejsze zapytania.
Aby utworzyć na serwerze bazę danych musimy użyć zapytania
Kod:
CREATE DATABASE nazwa;
gdzie nazwą jest nazwa bazy jaką chcemy utworzyć.
Aby usunąć z serwera bazę należy użyć zapytania
Kod:
DROP DATABASE nazwa;
gdzie nazwą jest nazwa bazy jaką chcemy usunąć.
Aby wyselektować odpowiednie rekordy z bazy należy stworzyć zapytanie
Kod:
SELECT * FROM nazwa_tabeli;
gdzie nazwą tabeli jest nazwa tabeli z której chcemy pobrać rekordy. Te zapytanie jest o wiele bardziej rozbudowane, lecz to nie jest tematem poradnika, więc zapraszam do zapoznania się z nim przez manuala bądź inne źródła.
Aby dodać rekord do bazy należy użyć zapytania
Kod:
INSERT INTO nazwa_tabeli VALUES(1,'"tekst"',false);
nazwą tabeli jest nazwa tabeli do której chcemy dodać rekord, należy także pamiętać, aby wartości liczbowe, daty i wartości logiczne podawać bez nawiasów "", natomiast teksty oczywiście musimy podawać w nawiasach "".
Aby edytować rekordy należy wykonać następujące zapytanie
Kod:
UPDATE nazwa_tabeli SET pole = 1;
nazwą tabeli jest nazwa tabeli której chcemy edytować rekordy, a polem jest nazwa pola, które chcemy edytować. Należy pamiętać, że zasada co do pól o której pisałem przy ich dodawaniu tutaj także obowiązuje.
Aby usunąć rekordy należy skonstruować zapytanie
Kod:
DELETE * FROM nazwa_tabeli;
nazwą tabeli jest nazwa tabeli której chcemy usunąć rekordy.
Mamy już podstawy MySQL przypomniane, teraz należy przenieść je do php.
Aby wykonać zapytanie w php należy użyć funkcji
Kod PHP:
mysql_query("zapytanie");
W przypadku zapytań, których celem nie jest pobranie informacji z bazy to wystarczy, więc możemy spokojnie w ten sposób dodawać rekordy do bazy, usuwać je oraz edytować.
Natomiast, jeżeli chcemy pobrać rekordy z bazy musimy cały wynik zapytania mysql_query zapisać do zmiennej, a następnie go odpowiednio sformatować. Możemy to zrobić w następujący sposób
Kod PHP:
$query = mysql_query("SELECT * FROM user");
$row = mysql_fetch_row($query);
Teraz możemy odwoływać się do pól tabeli, które zostały dodane do tablicy $row, niestety został dodany tylko jeden rekord, pierwszy z tych, które zostały wczytane z bazy, więc jeżeli chcemy odczytać wszystkie rekordy musimy wykonać następujący skrypt
Kod PHP:
$query = mysql_query("SELECT * FROM user");
while($row = mysql_fetch_row($query)){
echo $row['nazwa'];
}
Czyli musimy wywołać funkcję mysql_fetch_row tyle razy, ile jest rekordów w bazie. W tym celu pomoże nam pętla while. przez $row['nazwa'] możemy wypisać odpowiednią zawartość rekordu dla danego pola.
Zliczanie rekordów
Możemy także zliczyć ilość rekordów z naszego zapytania w celu np. podaniu liczby użytkowników bez zbędnego tworzenia pętli. Do tego służy funkcja
Kod PHP:
$query = mysql_query("SELECT * FROM user");
$ilosc = mysql_num_rows($query);
echo $ilosc;
Poprzez funkcję mysql_num_rows, której jako argument należy podać wynik zapytania mysql_query możemy zapisać ilość rekordów do zmiennej, a następnie je wyświetlić.
Dobre rady
Postaram się także podać klika dobrych rad, których osobiście przestrzegam.
- Dobrym nawykiem jest pisanie składni MySQL wielkimi literami, pomaga to później w łatwiejszym rozszyfrowaniu kodu przy refactoringu,
- Warto także informacje o bazie takie jak host, nazwa użytkownika, hasło oraz nazwa bazy zapisać do zmiennych albo i stałych, a następnie wydzielić do oddzielnego pliku php i includować przed połączeniem. Usprawni to późniejszą zmianę adresu bazy bądź jej nazwy,
- Jeżeli mamy już wystarczające umiejętności w pisaniu obiektowym możemy naszą komunikację z MySQL zapakować w czytelne i łatwe w edycji klasy,
- Ważne jest, aby każde zapytanie, gdzie dane wyszukujemy po tym co użytkownik podał przepuszczać przez parsery tzn. funkcje, które zadbają o to, by użytkownik nie próbował wprowadzać niewłaściwych danych do bazy (sql injection) przykładem takiej funkcji jest
Kod PHP:
addslashes ( string $str )
która dodaje \ do wszystkich znaków mogących przerwać zapytanie np. ' czy ". Dobra aplikacja to bezpieczna aplikacja.
Liczę na wasze komentarze oraz ewentualne wytkniecie niedociągnięć i błędów.