5. Współpraca z bazą danych MySQL



Podobne dokumenty
Autor: Joanna Karwowska

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

6. Bezpieczeństwo przy współpracy z bazami danych

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Wykład 5: PHP: praca z bazą danych MySQL

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Instalacja MySQL.

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Podstawy programowania III WYKŁAD 2

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Internetowe bazy danych

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

CREATE USER

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

PHP: bazy danych, SQL, AJAX i JSON

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Bazy Danych i Usługi Sieciowe

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Projektowani Systemów Inf.

Podstawy programowania (PHP/Java)

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Bazy danych i usługi sieciowe

Aplikacje WWW - laboratorium

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Zajęcia 11 wykorzystanie MySQL w PHP

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

Dlaczego PHP? - zalety

15. Funkcje i procedury składowane PL/SQL

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Dokumentacja smsapi wersja 1.4

Aplikacje WWW - laboratorium

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

BACKUP BAZ DANYCH FIREBIRD

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Praca z programami SAS poza lokalną siecią komputerową UZ. Zestawienie tunelu SSH oraz konfiguracja serwera proxy w przeglądarce WWW

Oracle PL/SQL. Paweł Rajba.

SQL (ang. Structured Query Language)

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Autor: Joanna Karwowska

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Niezbędne narzędzia. Przed rozpoczęciem pracy z PHP należy zainstalować odpowiednie narzędzia: środowisko PHP serwer WWW serwer baz danych MySQL

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Projektowanie systemów baz danych

Bloki anonimowe w PL/SQL

Po instalacji serwera MYSQL dostępne jest konto o nazwie root. Domyślnie nie ma ono przypisanego hasła, aczkolwiek podczas procesu konfiguracji jest

Internetowe bazy danych

Dokumentacja serwisu internetowego Zespołu Szkół Technicznych w Radomiu.

PHP + MySQL w laboratorium (1)

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Dokumentacja interfejsu MySQL. Platforma BSMS.PL Instrukcja podłączenia po przez mysql

Deklaracja struktury w C++

SQL injection. Metody włamań do systemów komputerowych p. 1/13. Bogusław Kluge, Karina Łuksza, Ewa Makosa

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Dokumentacja SQL API 1

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Paweł Rajba

Żeby korzystać z opisywanego modułu, należy go włączyć do kompilowanej wersji interpretatora PHP:

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Bazy Danych. Ćwiczenie 1: Przygotowanie środowiska pracy dla bazy MySQL z wykorzystaniem XAMPP Portable Lite oraz MySQL-Front

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Liczby losowe i pętla while w języku Python

KatMPBSoft - 1 -

Bazy Danych i Usługi Sieciowe

Dokumentacja fillup - MS SQL

Wdrożenie modułu płatności eservice. dla systemu Magento

Struktura drzewa w MySQL. Michał Tyszczenko

Bazy Danych i Usługi Sieciowe

Tworzenie serwisów WWW. Pierwsza pomoc

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Zaawansowane bazy danych i hurtownie danych

Ref. 7 - Język SQL - polecenia DDL i DML

EGZAMIN POTWIERDZAJĄCY KWALIFIKACJE W ZAWODZIE Rok 2017 CZĘŚĆ PRAKTYCZNA

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Kalipso wywiady środowiskowe

Użytkowniku programu FINKA, przekazujemy E-book, który omawia najważniejsze kwestie dotyczące generowania i wysyłania JPK.

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Bazy danych i strony WWW

Smarty PHP. Leksykon kieszonkowy

Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Instrukcja instalacji programu ARPunktor wraz z serwerem SQL 2005 Express

Podstawy JavaScript ćwiczenia

System. Instalacja bazy danych MySQL. Autor : Piotr Zielonka tel Piotrków Tryb., sierpień 2018r.

Transkrypt:

5. Współpraca z bazą danych MySQL 5.1. Informacje ogólne Język PHP posiada obsługę wielu relacyjnych baz danych, jedną z najpopularniejszych jest baza MySQL. PHP pozwala na pełną współpracę z bazą. Praca polega na otwarciu sesji, zadaniu zapytania, lub zapytań, odebraniu ewentualnych wyników i na koniec zamknięciu sesji. Obsługa MySQL jest zewnętrznym modułem i trzeba ją włączyć przy kompilacji PHP (zwłaszcza PHP 5). Rzecz jasna PHP obsługuje zarówno połączenia z lokalną bazą danych (znajdującą się na tym samym serwerze co wykonywany skrypt), jak i z bazami zdalnymi, za pomocą protokołu TCP/IP. 5.2. Nawiązanie połączenia mysql_connect() Za pomocą tej funkcji tworzymy nowe połączenie z bazą danych: $polaczenie = mysql_connect(host[:port], uzytkownik, haslo); Wszystkie parametry funkcji są opcjonalne. Pierwszy parametr to nazwa, lub adres IP serwera na którym znajduje się baza. Domyślną nazwą jest localhost, domyślnym portem 3306. Następnie mamy nazwę użytkownika bazy, wartością domyślną jest nazwa użytkownika procesu wykonującego skrypt (najczęściej będzie to httpd ), po nim hasło tego użytkownika, wartością domyślną jest pusty łańcuch tekstowy. Wynikiem funkcji jest wartość typu zasób identyfikująca połączenie (to ważne, jeżeli w skrypcie

wykonujemy więcej niż jedno połączenie). W przypadku niepowodzenia zwracana jest wartość logiczna FALSE. 5.3. Użycie operatora die i operatora @ przy obsłudze błędów Przy łączeniu się z bazą danych stosunkowo często zdarzają się niepowodzenia. Błędy takie wymagają prawidłowej obsługi, w przeciwnym wypadku dostarczamy potencjalnym hakerom przydatnich informacji. Oto prosty przykład: $c = mysql_connect('jakis.serwer.com.pl:9384', 'httpd', 'tajne_haslo'); W przypadku niepowodzenia połączenia, użytkownik w przeglądarce zobaczy taki oto tekst: Warning: mysql_connect(): Unknown MySQL Server Host 'jakis.serwer.com.pl' (0) in / home/krashan/public_html/t.php on line 9 Albo na przykład coś takiego (dla innego serwera): Warning: mysql_connect(): Access denied for user: 'httpd@localhost' (Using password: YES) in /home/krashan/public_html/t.php on line 9 Na szczęście hasło nie jest podawane, ale sporo informacji wycieka (np. lokalizacja skryptu, serwer na którym jest baza, nazwa użytkownika). Nie powinniśmy dopuścić do

pokazania takich informacji użytkownikowi. Do ich zablokowania użyjemy operatorów die i @. Drugi z nich, jak wiadomo, blokuje wypisywanie wiadomości o błędach, jednak jakąś wiadomość dobrze by było wyświetlić, żeby użytkownik mniej więcej wiedział gdzie jest problem. Tui możemy posłużyć się operatorem die, który po wypisaniu wskazanej wiadomości powoduje natychmiastowe zakończenie skryptu. Oto przykładowe zastosowanie: $c = @mysql_connect('jakis.serwer.com.pl:9384', 'httpd', 'tajne_haslo') or die "Problem z połączeniem z bazą danych!"; Tym razem jedyne, co użytkownik zobaczy na ekranie w przypadku nienawiązania połączenia, będzie napis: Problem z połączeniem z bazą danych! Nie ujawniamy więc żadnych informacji potencjalnym włamywaczom. Kilka słów wyjaśnienia na temat zastosowanego operatora or. W przypadku dwóch wyrażeń połączonych tym operatorem, PHP najpierw ewaluuje (a więc wykonuje) najpierw pierwsze z nich, w tym przypadku łączy się z bazą danych. Jeżeli wynik tego wyrażenia konwertuje się do logicznej prawdy, drugie wyrażenie nie jest wykonywane (bo TRUE or cokolwiek = TRUE). Jeżeli zaś pierwsze wyrażenie ma wartość FALSE, to wykonywane jest drugie, bo jego wartość jest niezbędna do ustalenia wartości całego wyrażenia. Zatem die() wykona się tylko jeśli mysql_connect() zwróci FALSE.

5.4. Zamykanie połączenia z bazą mysql_close() Tutaj mamy sytuację podobną jak przy plikach. W zasadzie nie jesteśmy zobligowani do zamykania sesji MySQL, ponieważ zostają one zamknięte automatycznie przy wyjściu ze skryptu. Niemniej jednak wskazane jest (ze względu na oszczędne gospodarowanie zasobami) zamykanie połączenia, gdy nie jest ono już potrzebne. Oto przykład zamknięcia połączenia: mysql_close($polaczenie); Gdzie $polaczenie to oczywiście identyfikator zwrócony przez mysql_connect(). Można też wywołać tę funkcję bez parametru, wtedy zamykane jest ostatnio otwarte połączenie. Jest to wygodne, gdy w skrypcie jest tworzone tylko jedno połączenie. 5.5. Wybór bazy danych mysql_select_db() Tak jak i przy pracy z klientem MySQL, pierwszym krokiem przy pracy jest wybór bazy na której będziemy pracować: mysql_select_db('nazwa'); Oczywiście użytkownik, którego podaliśmy przy nawiązywaniu połączenia, musi mieć dostęp do wybranej bazy. Ewentualne błędy z tym związane uwidocznią się dopiero przy wysłaniu zapytania, jako że mysql_select_db() nie zwraca żadnej wartości.

5.6. Wysyłanie zapytań mysql_query() Funkcja ta służy do wysyłania wszelkiego rodzaju zapytan do bazy, zarówno tych odczytujących informacje, jak i tych modyfikujących. Dozwolony jest cały repertuar języka SQL (PHP nie sprawdza zapytania pod względem składniowym ani merytorycznym). Wynik funkcji zależy od rodzaju zapytania. W przypadku zapytań zwracających informację (przede wszystkim SELECT, a także SHOW, DESCRIBE i EXPLAIN), wynikiem jest zmienna typu zasób używana później do pobierania informacji ze zwróconej odpowiedzi. Dla zapytań modyfikujących, takich jak UPDATE, DROP czy DELETE zwracana jest wartość logiczna TRUE. W przypadku niepowodzenia, dla wszystkich zapytań zwracane jest logiczne FALSE. Przykład użycia: if ($odp = mysql_query('select * FROM tablica WHERE id = 46')) { // rób coś z odpowiedzią } mysql_free_result($odp); Przyczyną wielu błędów przy tej funkcji jest niepoprawne ustawienie praw użytkowników w bazie danych, oczywiście użytkownik podany przy otwieraniu połączenia musi mieć uprawnienia do zadawania używanych w mysql_query() typów zapytań.

5.7. Zwalnianie wyników zapytania mysql_free_result() Zapytania kierowane do bazy danych często zwracają sporą ilość informacji. Wykonując funkcję mysql_query() PHP rezerwuje pamięć na wszystkie podawane przez bazę danych informacje. Mająz na względzie oszczędne gospodarowanie zasobami serwera (przede wszystkim wolną pamięcią) powinno się zwalniać odpowiedź na zapytanie w chwili, gdy nie jest już potrzebna. Jeżeli tego nie zrobimy, zrobi to za nas PHP, ale dopiero przy wyjściu ze skryptu. Jedynym parametrem mysql_free_result() jest zasób zwrócony uprzednio przez mysql_query(). Jeżeli nie podamy tego parametru zostanie zwolniony wynik ostatniego zapytania (zwracającego dane). Przykład użycia tej funkcji znajduje się w rozdziale 5.6. 5.8. Ogólne informacje o wykonanym zapytaniu Funkcja mysql_num_rows() zwraca ilość wierszy danych znajdujących się w odpowiedzi na zapytanie SELECT, SHOW, czy DESCRIBE. Parametrem tej funkcji jest identyfikator odpowiedzi zwrócony przez mysql_query(). Funkcja mysql_affected_rows() podaje ilość wierszy tablicy w bazie danych zmodyfikowanych przez zapytania takie jak UPDATE, DELETE, czy DROP.

5.9. Sposoby pobierania informacji z zapytania Wynik zapytania zwrócony przez mysql_query(), jest zwykle tablicą złożoną z wybranych przez zapytanie danych. Nie jest on jednak tablicą z punktu widzenia PHP, wszak rezultat zapytania jest typu zasób. PHP pozwala na sięganie do odpowiedzi z bazy całymi wierszami, bądź też dostęp do pojedynczych pól. 5.9.1. 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 tableli SQL wybranych zapytaniem. Załóżmy, że mamy następującą tabelę w MySQL: imie nazwisko wiek varchar(20) varchar(30) smallint(3) Wyślijmy teraz zapytanie: $w = mysql_query('select * FROM tabela'); mysql_fetch_row() zwróci nam taką tablicę:

0 => [imie] 1 => [nazwisko] 2 => [wiek] Teraz inne nieco zapytanie: $w = mysql_query('select wiek, imie FROM tabela'); Tablica zwracana przez mysql_fetch_row() wygląda teraz inaczej: 0 => [wiek] 1 => [imie] Po zwróceniu aktualnego wiersza odpowiedzi, następuje przejście do następnego. Jeżeli więc będziemy wywoływać mysql_fetch_row() w pętli, to dostaniemy tablice zawierające kolejne wiersze tabeli zwróconej przez zapytanie. W momencie dotarcia do końca tabeli, funkcja zwróci FALSE. 5.9.2. mysql_fetch_assoc() Funkcja podobna do poprzedniej, z tym, że kluczami zwracanej tablicy są nazwy kolumn z SQL-a (ewentualnie zmienione w zapytaniu). Przy założeniu, że operujemy na tabeli SQL jak w punkcie 5.9.1, poniższe zapytania dadzą odpowiedzi jak pokazano: mysql_query('select * FROM tabela');

'imie' => [imie] 'nazwisko' => [nazwisko] 'wiek' => [wiek] Przykład zapytania ze zmianą nazw kolumn: $w = mysql_query('select wiek AS latka, imie AS cokolwiek FROM tabela'); Tablica zwracana przez mysql_fetch_assoc() wygląda w tym przypadku tak: 'latka' => [wiek] 'cokolwiek' => [imie] Tak samo jak dla mysql_fetch_row(), po zwróceniu aktualnego wiersza odpowiedzi, następuje przejście do następnego. 5.9.3. mysql_result() Ta z kolei funkcja pozwala na dostęp do pojedynczego pola tabeli zwróconej w odpowiedzi na zapytanie. Generalnie jest ona wolniejsza od poprzednich, więc jeżeli przetwarzamy całe wiersze danych, nie jest zalecana. Zawsze lepiej jest ograniczyć zakres danych w zapytaniu do bazy, niż w samym skrypcie PHP. Dzięki temu mniej danych jest przesyłanych z bazy do skryptu, zmniejszamy też zużycie pamięci. Ograniczenie zakresu danych w skrypcie jest usprawiedliwione tylko wtedy, gdy kryterium jest na tyle skomplikowane, że trudno je zapisać w zapytaniu SQL.

Funkcja mysql_result() przyjmuje trzy parametry. Pierwszy to identyfikator odpowiedzi na zapytanie, zwrócony przez mysql_query(). Drugi to numer wiersza, a trzeci, opcjonalny to numer, albo nazwa kolumny (domyślnie pierwsza kolumna). Funkcja działa szybciej, jeżeli podamy numer kolumny zamiast nazwy. Oto przykład pokazujący niewłaściwe użycie mysql_result() i prawidłowy sposób ograniczenia zakresu danych w samym zapytaniu. Poszukujemy w tabeli opisanej w punkcie 5.9.1 nazwisk wszystkich osób o imieniu Jan i wieku poniżej 40 lat: $q = mysql_query('select * FROM tabela') or die ('Błąd!'); for ($i = 0; $i < mysql_num_rows($q); $i++) { if ((mysql_result($q, $i, 'imie') == 'Jan') and (mysql_result($q, $i, 'wiek') < 40)) { echo(mysql_result($q, $i, 'nazwisko')); echo('<br>'); } } A teraz tak, jak to powinno być zrobione: $q = mysql_query("select nazwisko FROM tabela WHERE imie=\"jan\" AND wiek<40") or die ('Błąd!'); while ($wiersz = mysql_fetch_row($q)) print("{$wiersz[0]}<br>");

5.10. Pomijanie danych mysql_data_seek() Jedyną do tej pory poznaną funkcją pozwalającą na przeskakiwanie nieinteresujących danych, była nienajszybsza mysql_result(). Przy pracy całymi wierszami na swobodne przesuwanie się po wierszach tabeli pozwala mysql_data_seek(). Oto sposób użycia: mysql_data_seek($wynik, $wiersz); Wskaźnik danych w wyniku identyfikowanym przez $wynik zostaje przesunięty do wiersza o numerze $wiersz. Jeżeli podany wiersz nie istnieje, funkcja zwróci FALSE. Następne wywołanie mysql_fetch_row() lub mysql_fetch_assoc() załaduje podany wiersz. Jeszcze raz podkreślam, że zdecydowanie lepiej jest odrzucić niepotrzebne wiersze już na poziomie zapytania do bazy danych (poprzez odpowiednie użycie słowa kluczowego WHERE), niż ładować dużą tabelę i obrabiać ją w PHP. 5.11. Długości poszczególnych pól mysql_fetch_lenghts() Funkcja ta służy do pobrania długości (w znakach) pól ostatnio załadowanego (przy pomocy mysql_fetch_row() lub mysql_fetch_assoc()) wiersza. Zwracana jest tablica z kluczami numerycznymi, wartości odpowiadają długościom pól tabeli. Oto przykład, jeżeli zwrócony przez mysql_fetch_assoc() wiersz wygląda tak: 'imie' => 'Władysław', 'nazwisko' => 'Gomułka', 'wiek' => 107

to tablica zwrócona przez mysql_fetch_lenghts() będzie miała następującą postać: 0 => 9, 1 => 7, 2 => 3