MySql - część III
Poznaliśmy już pierwsze możliwości SQL'a, potrafimy stworzyć bazę danych, umieścić w niej dane, wybrać je i usunąć. Jednak do realizacji tych celów posługujemy się na razie dość prymitywnymi narzędziami. Aby w pełni poznać i docenić SQL, musimy najpierw, przynajmniej w skrócie poznać narzędzia jakie oferuje nam PHP do obsługi bazy danych. Czyli naszym celem po pierwszych dwóch krokach, będzie wyjście z domu na pierwszy spacer, ale za nim to uczynimy, musimy się najpierw ubrać, czyli dowiedzieć jakie ułatwienia oferuje nam PHP.
Spis treści
1.1 Nawiązywanie połączenia
2.1 Wysyłamy zapytania do bazy danych
2.2 Odradzane funkcje
2.3 Wybieramy bazę danych
3.1 Wybieranie wyników do tabelek
3.2 Wybieranie wyników do obiektów
3.3 Zliczamy
4.1 Zamykanie połączenia
1.1 Nawiązywanie połączenia
Po stronie PHP mamy dwa zasoby obsługujące bazę danych. Są to identyfikator połączenia oraz wynik. Wynik już częściowo poznaliśmy. Jest to to co zwracała nam funkcja mysql_query. Identyfikator natomiast służy, jak sama nazwa wskazuje, do identyfikacji, gdyż nie trudno sobie wyobrazić sytuację, w której w jednym skrypcie korzystamy z kilku baz danych.
Czyli zacznijmy. Teraz opiszemy etap który poprzednio pominęliśmy, zakładając
że PHP ma powiązanie (niejako samo z siebie) z domyślną bazą danych, gdyż
w większości lokalnie zainstalowanych serwerów służących testom tak właśnie jest. Ale tak naprawdę musimy zacząć od nawiązania połączenia z właściwą bazą danych. Do tego służy funkcja:
# $linkId - Identyfikator połączenia
# $serverName - nazwa serwera
# $userName - nazwa użytkownika
# $userPass - hasło użytkownika
# $newConnect - wartość typu BOOLEAN - domyślnie =false
Funkcja ta, w wypadku nie podania żadnych argumentów przyjmuje je domyślnie
w następujący sposób:
$userName= # nazwa użytkownika będącego właścicielem procesu serwera;
$userPass="";
$newConnect=false;
Wywołanie tej funkcji załatwia nam kilka spraw. Po pierwsze otwier nam połączenie z bazą danych. Po drugie informuje nas o nie udanej próbie zwracając wtedy $linId==false. W końcu po trzecie przypisuje nam identyfikator połączenia do zmiennej $linkId gdy połączenie zostanie nawiązane. Tak więc, dysponując już połączeniem z bazą danych możemy przystąpić do dalszej pracy.
Warto też zwrócić jeszcze uwagę na ostatni argument $newConnect. Gdy jest on równyfalse, wtedy, w przypadku podania argumentów takich jak dla otwarcia istniejącego już połączenia, zostanie tylko zwrócony identyfikator tego istniejącego połączenia, natomiast nowe nie zostanie ustanowione. Natomiast jeśli $newConnect=true, wtedy mimo takiej sytuacji jak wyżej zostanie wymuszone otwarcie nowego, kolejnego połączenia.
2.1 wysyłamy zapytania do bazy danych
W pierwszym artykule z taj serii, poznaliśmy już częściowo funkcję mysql_query. Teraz przyszedł czas aby przyjrzeć się jej dokładniej.
Pełny wygląd tej funkcji jest następujący:
Argumentami tej funkcji są:
-- Znana nam już zmienna $zapytanie, zawierająca zapytanie do bazy
w języku SQL
-- $linId czyli opisany tu wcześniej identyfikator połączenia
-- $typWyniku natomiast określa, czy wynik ma być buforowany
MYSQL_STORE_RESULT, czy też nie MYSQL_USE_RESULT. Domyślne wynik tej jest buforowany.
W zmiennej $wynik dostajemy natomiast wartość typu BOOLEAN, informującą nas o prawidłowości (true), lub nie (false) naszego zapytania. Czyli jeśli nasze zapytanie było prawidłowe, znaczy że serwer może jew wykonać, natomiast nie mamy żadnej informacji o tym czy wykonał, i ile zostało przetworzonych rekordów.
Wyjątkiem są tu zapytania typu SELECT, SHOW, EXPLAIN i DESCRIBE (te 3 ostatnie poznamy w późniejszym okresie) dla których funkcja mysql_query zwraca zamiast true, identyfikator wyniku zapytania, czyli to czego ostatnio używaliśmy do wyświetlania danych z bazy danych.
2.2 Odradzane funkcje
Na samym też początku przytoczmy listę funkcji, które mogą się na pierwszy rzut oka wydawać przydatne, jednak ich stosowanie jest odradzane. Dlatego też poniższe funkcje zostaną tu wypisane i nie będziemy się już więcej nimi zajmować.
mysql_create_db
mysql_drop_db
mysql_db_query
Jednak nie należy się zbytnio przejmować gdyż brak tych funkcji bardzo łatwo zastąpić innymi instrukcjami (w wypadku ostatniej) lub odpowiednimi zapytaniami poprzez mysql_query (w wypadku dwóch pierwszych).
2.3 Wybieramy bazę danych
Jak pisałem w pierwszym artykule z tej serii, do wskazania bazy danych, którą chcemy używać może nam posłużyć funkcja mysql_query z argumentem w postaci:
Jednak dla naszej wygody możemy posłużyć się wprost funkcją udostępnianą nam przez PHP:
Argumentem są odpowiednio nazwa bazy którą chcemy wybrać do użytku, oraz identyfikator połączenia który mówi funkcji,na którym połączeniu ma ta funkcja zostać zrealizowana. Jeśli go nie podamy zostanie użyte ostatnio otwarte połączenie. Jako wynik, funkcja zwróci nam wartość typu BOOLEAN mówiącą o powodzeniu (true), lub nie (false) tej operacji.
3.1 Wybieranie wyników do tabelek
Ostatnim tematem którym się dzisiaj zajmiemy będzie wydzieranie wiadomości z tego na co wskazuje nam identyfikator wyniku $wynik w wypadku zapytań typu SELECT, SHOW, EXPLAIN i DESCRIBE zakończonych sukcesem.
Wyniki te możemy wyłuskać na dwa sposoby - albo do tabelek, albo do obiektów. Wydaje mi się, że dla początkujących prostszą metodą będzie wyłuskanie ich do tabelek i dlatego od tego zaczniemy. Najbardziej chyba podstawową jest tu funkcja:
Funkcja ta pobierze nam jedną krotkę z wyniku i wszystkie jej pola zapisze do kolejnych wierszy tablicy $tabelaKrotki poczynając od zera. Każdorazowe wywołanie tej funkcji powoduje zwrócenie kolejnej pobranej krotki.
W wypadku gdy nie ma już nic do pobrania zwrócone zostanie false.
Drugą funkcją do obsługi wyniku w postaci tabelkowej jest:
Funkcja ta działa tak samo jak mysql_fetch_row, z tym że zamiast indeksować tablicę numerycznie, tworzy tablice asocjacyjną indeksowaną nazwami pól w krotce.
Ostatnią jest funkcja łącząca cechy obu wyżej wymienionych:
Funkcja ta zachowuje się jak mysql_fetch_row dla $typTabeliKrotki=MYSQL_NUM, lub tak samo jak mysql_fetch_assoc dla $typTabeliKrotki=MYSQL_ASSOC. Pytanie zatam po co ta funkcja? Dlatego że jej domyślną wartością $typTabeliKrotki
jest $typTabeliKrotki=MYSQL_BOTH. W tym wypadku funkcja ta zwraca tabelą zindekowaną zarówno numerycznie jak i nazwami pól
krotki, co czasami może być bardzo przydatne.
3.2 Wybieranie wyników do obiektów
Szczególnie przy pisaniu w PHP kodu zorientowanego obiektowo, przydatna może okazać się funkcja:
Funkcja ta zwraca obiekt $obiektKrotki, którego właściwościami o nazwach nazw pól w krotce, są wartości tych pól. Jednak w wyniku braku krotki do pobrania zamiast obiektu zostaje zwrócona wartość false.
3.3 Zliczamy
Często przydała by nam się informacja na temat tego ile krotek znajduje się w wyniku reprezentowanym przez identyfikator $wynik. Taką informację bez trudu możemy uzyskać posługując się funkcją:
$iloscKrotek będzie zawierać interesującą nas informację typu INIGER.
Bardzo podobnie dowiemy się o ilości pól w każdej krotce znajdującej się z naszym wyniku:
4.1 Zamykanie połączenia
Na koniec naszej pracy musimy zamknąć połączenie z bazą danych. do tego celu
użyjemy funkcji:
# $succes - wartość typu BOOLEAN informująca o wyniku działania
Funkcja jako argumentu używa identyfikatora połączenia $linkId. Jeśli nie zastanie on podany funkcja zamknie ostatnie połączenie. Wartość zmiennej $succes informuje nas o tym czy zamknięcie połączenia powiodło się (true) czy też nie (false).
4.2 Zakończenie
Przy tym wszystkim należy pamiętać iż poszerzyliśmy naszą wiedzę ale pozostaje jeszcze sporo funkcji PHP do obsługi baz danych. Te przedstawione tu powinne pozwolic na w miarę normalne poruszanie się po świecie baz danych jednak zachęcam do poznania wszystkich funkcji. Na pewno zaowocuje to lepszą współpracą z bazami danych.