BAZY DANYCH Obsługa bazy z poziomu języka PHP opracowanie: Michał Lech
Plan wykładu 1. PHP - co to jest? 2. Bazy danych obsługiwane przez PHP 3. Podstawowe polecenia 4. Sesje 5. Przykład - dodawanie towaru do koszyka
PHP - co to jest? PHP: Hypertext preprocessor skryptowy język programowania słuŝący do tworzenia stron / serwisów www uruchamianie skryptów po stronie serwera www - niemoŝliwe podejrzenie kodu przez klienta łączony z HTML
PHP - co to jest? Aby moŝliwe było uruchamianie stron PHP konieczne jest zainstalowanie serwera www i umieszczenie stron w odpowiednim katalogu serwera
HTML + PHP <html> <head> <title>php Test</title> </head> <body> <?php echo "Hello World";?> </body> </html>
Bazy danych obsługiwane przez PHP MySQL Postgres Oracle Mssql DB2
Połączenie z bazą resource pg_connect(string connection_string) pg_connect() Zwraca identyfikator połączenia, który jest uŝywany przez inne funkcje PostgreSQL-a. pg_connect() Otwiera tymczasowe połączenie do serwera PostgreSQL określonego przez connection_string. Zwraca identyfikator połączenia jeśli operacja się powiedzie. Zwraca FALSE jeśli połączenie nie mogło być nawiązane. connection_string powinien być łańcuchem w cudzysłowach. http://algorytmy.pl/doc/php/
Połączenie z bazą int pg_pconnect(string connection_string) pg_pconnect() otwiera stałe połączenie do serwera PostgreSQL. Zwraca identyfikator połączenia uŝywany przez inne funkcje PostgreSQL-a. Aby zezwolić na uŝywanie stałych połączeń, naleŝy ustawić dyrektywę php.ini pgsql.allow_persistent na "On" (jest to ustawienie domyślne). Maksymalna liczba jednoczesnych stałych połączeń moŝe być zdefiniowana przez dyrektywę php.ini pgsql.max_persistent (domyślnia wartość to -1 oznacza brak ograniczeń). Maksymalna liczba wszystkich połączeń moŝe być ustawiona przez dyrektywę php.ini pgsql.max_links. pg_close() nie zamyka połączeń stałych otwartych przez pg_pconnect(). http://algorytmy.pl/doc/php/
Połączenie z bazą $dbconn = pg_connect ("dbname=mary"); //Otwiera połączenie z bazą "mary" $dbconn2 = pg_connect ("host=localhost port=5432 dbname=mary"); //Otwiera połączenie z bazą "mary" na komputerze "localhost" przez port "5432" http://algorytmy.pl/doc/php/
Połączenie z bazą $dbconn3 = pg_connect ("host=sheep port=5432 dbname=mary user=lamb password=foo"); //Otwiera połączenie z bazą "mary" na komputerze "sheep" z uŝyciem nazwy uŝytkownika i hasła $dbconn4 = pg_connect ("host=sheep port=5432 dbname=test user=lamb password=bar"); //Otwiera połączenie z bazą "test" na komputerze "sheep" z uŝyciem nazwy uŝytkownika i hasła http://algorytmy.pl/doc/php/
Pozyskanie danych resource pg_query(resource connection, string query) pg_query() zwraca identyfikator wyniku jeśli zapytnie zostało wykonane lub FALSE w razie niepowodzenia. Szczegóły błędu mogą być odczytane przez funkcje pg_last_error() jeśli identyfikator połączenia jest prawidłowy. pg_query() wysyła zapytanie SQL do bazy PostgreSQL wskazanej przez identyfikator połączenia connection zwrócony przez funkcję pg_connect() lub pg_pconnect(). Zwrócona wartość jest identyfikatorem wyniku uŝywanym przez inne funkcje PostgreSQL takie jak pg_fetch_array(). http://algorytmy.pl/doc/php/
Pozyskanie danych connection jest parametrem opcjonalnym dla pg_query(). Jeśli connection nie jest podane, domyślne połączenie będzie uŝyte. Domyślnym połączeniem jest ostatnie połączenie otwarte przez pg_connect() lub pg_pconnect(). Mimo Ŝe connection moŝe zostać pominiete, nie jest to zalecane, gdyŝ moŝe spowodować trudny do znalezienia błąd w skrypcie. http://algorytmy.pl/doc/php/
Pozyskanie danych $query = SELECT * FROM autorzy ; $result = pg_query($dbh, $query);
Pobranie liczby wierszy i kolumn: $liczba_wierszy = pg_num_rows($result); $liczba_kolumn = pg_num_fields($result);
Pobranie konkretnych danych (z $result): mixed pg_fetch_result(resource result, int row, mixed field) pg_fetch_result() zwraca dane z wyniku result zwróconego przez pg_query(). row jest numerem wiersza. field jest nazwą kolumny (łańcuch) lub jej indeksem(liczba). Parametry row i field wskazują którą komórkę tabeli wyniku naleŝy zwrócić. Wiersze są numerowane od 0. Zamiast nazwy kolumny moŝna uŝyć numerycznego indeksu kolumny. Kolumny są numerowane od 0. http://algorytmy.pl/doc/php/
Wyświetlenie wyników: for($w = 0; $w < $liczba_wierszy; $w++) { for($k = 0; $k < $liczba_kolumn; $k++) { echo pg_fetch_result($wynik, $w, $k); echo \t ; } echo <br /> ; }
Pobranie wiersza: array pg_fetch_row(resource result [, int row]) pg_fetch_row() pobiera jeden wiersz z wyniku wskazanego przez result. Wiersz jest zwracany jako tablica. KaŜda kolumna jest elementem tablicy o indeksie odpowiadającym numerowi kolumny w wyniku. Kolumny są numerowane od 0. Zwraca tablicę z danymi odpowiadającymi pobranemu wierszowi lub FALSE gdy nie ma więcej wierszy. Od wersji php 4.1.0 argument row opcjonalny http://algorytmy.pl/doc/php/
Pobranie wiersza: $num = pg_num_rows($result); for ($i = 0; $i < $num; $i++) { $r = pg_fetch_row($result, $i); for ($j = 0; $j < count($r); $j++) { echo "$r[$j] "; } echo "<BR />"; } http://algorytmy.pl/doc/php/
Pobranie wiersza (sposób 2): array pg_fetch_array (resource result, int row [, int result_type]) pg_fetch_array() zwraca tablicę zawierającą dane z pobranego wiersza lub FALSE jeśli nie ma więcej wierszy. pg_fetch_array() jest rozszerzeną wersją pg_fetch_row(). Oprócz zapisywania danych w indeksach numerycznych, zapisuje je teŝ w indeksach przyporządkowujących (asocjacyjnych), uŝywając nazw kolumn jako kluczy. http://algorytmy.pl/doc/php/
Pobranie wiersza (sposób 2) c.d.: array pg_fetch_array (resource result, int row [, int result_type]) row jest numerem wiersza do pobrania. Pierwszy wiersz ma numer 0. result_type opcjonalny parametr określający rodzaj wyniku. result_type jest stałą i moŝe przyjmować następujące wartości: PGSQL_ASSOC, PGSQL_NUM, i PGSQL_BOTH. pg_fetch_array() zwraca tablicę z indeksami przyporządkowującymi które mają nazwę kolumny jako klucz dla PGSQL_ASSOC, numer kolumny jako klucz dla PGSQL_NUM i obydwa (nazwę/numer) dla PGSQL_BOTH. Domyślną wartością jest PGSQL_BOTH. http://algorytmy.pl/doc/php/
Pobranie wiersza (sposób 2) c.d.: $arr = pg_fetch_array ($result, 0, PGSQL_NUM); echo $arr[0]; $arr = pg_fetch_array ($result, 1, PGSQL_ASSOC); echo $arr["author"]; http://algorytmy.pl/doc/php/
Pobranie wiersza (sposób 3): object pg_fetch_object (resource result, int row [, int result_type]) pg_fetch_object() zwraca obiekt którego atrybutami są dane pobranego wiersza. Zwraca FALSE jeśli nie ma więcej wierszy lub wystąpił błąd. pg_fetch_object() jest podobna do pg_fetch_array(), z jedną róŝnicą - zwracany jest obiekt zamiast tablicy. Oznacza to Ŝe dane są dostępne tylko przez nazwy kolumn, a nie przez indeksy, gdyŝ liczby nie mogą być atrybutami obiektu. http://algorytmy.pl/doc/php/
Pobranie wiersza (sposób 3) c.d.: object pg_fetch_object (resource result, int row [, int result_type]) row numer wiersza do pobrania. Pierwszy wiersz ma numer 0. Pod względem szybkości funkcja ta jest identyczna jak pg_fetch_array(), i prawie tak szybka jak pg_fetch_row() (róŝnica jest nieznacząca). http://algorytmy.pl/doc/php/
Pobranie wiersza (sposób 3) c.d.: while ($data = pg_fetch_object ($result, $row)) { echo $data->imie." ("; echo $data->nazwisko."): "; echo $data->rok_urodzenia"<br>"; $row++; } http://algorytmy.pl/doc/php/
Pobranie nazwy pola: $nazwa_pola = pg_field_name($wynik, $k);
Zamknięcie połączenia z bazą: pg_close($dbh);
Sesje Sesje pozwalają na przechowywanie informacji i korzystanie z nich na róŝnych stronach w obrębie danego serwisu (np. stan koszyka)
Sesje Dwa sposoby przechowywania informacji o stanie: po stronie serwera po stronie klienta
Sesje Z sesją związane są dwa elementy: zmienne sesji przechowują stan róŝnych obiektów np. nazwy produktów w koszyku, ich liczba, czy uŝytkownik jest zalogowany, itd. identyfikator sesji 32 cyfry szesnastkowe wykorzystywany przez serwer do odnalezienia zmiennych sesji (dzięki identyfikatorom odróŝniane są od siebie róŝne sesje)
Sesje KaŜda sesja po pewnym czasie bezczynności powinna wygasać, poniewaŝ: uŝytkownik mógł opuścić stronę bez wylogowania przechowywanie informacji o sesji przez długi czas moŝe być niebezpieczne
Sesje Inicjowanie sesji session_start() Zmienne udostępniane za pośrednictwem superglobalnej tablicy asocjacyjnej: $_SESSION np. $_SESSION[ zamowienie_nr ] - zmienna sesji przechowująca numer zamówienia
Sesje Odnajdywanie istniejącej sesji podobnie jak przy tworzeniu: session_start()
Sesje Usuwanie zmiennych sesji usunięcie wybranej zmiennej: unset($_session[ zamowienie_nr ]) usunięcie wszystkich zmiennych: $_SESSION = array();
Sesje Zamykanie sesji session_destroy(); przed wywołaniem session_destroy() naleŝy wywołać session_start();