Część VII Baza danych MySQL i PHP



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

Autor: Joanna Karwowska

Instalacja MySQL.

Podstawy programowania III WYKŁAD 2

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

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

Internetowe bazy danych

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

Wykład 5. SQL praca z tabelami 2

Język SQL, zajęcia nr 1

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

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

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

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

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

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

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

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

SQL (ang. Structured Query Language)

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Polecenia SQL

Projektowanie systemów baz danych

PHP: bazy danych, SQL, AJAX i JSON

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Wykład 05 Bazy danych

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

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

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

5. Współpraca z bazą danych MySQL

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

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

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

W tej części zajmiemy się ćwiczeniami dotyczącymi modyfikacji rekordów.

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

Wykład 8. SQL praca z tabelami 5

Ćwiczenie zapytań języka bazy danych PostgreSQL

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

Autor: Joanna Karwowska

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

Internetowe bazy danych

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

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Bazy danych SQL Server 2005

Wprowadzenie do baz danych

Bazy danych 7. SQL podstawy

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

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Kurs. Podstawy MySQL

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

SIECI KOMPUTEROWE I BAZY DANYCH

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

Struktura drzewa w MySQL. Michał Tyszczenko

Bazy Danych i Usługi Sieciowe

Relacyjne bazy danych. Podstawy SQL

Obiektowe bazy danych

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

1. Kalkulator czterech działań. 2. Konwersja ciągu znaków do tablicy.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

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

15. Funkcje i procedury składowane PL/SQL

Krótki przegląd zapytań

SSK - Techniki Internetowe

CREATE USER

Wykład 4. SQL praca z tabelami 1

Podstawy technologii WWW

Imię i Nazwisko Data Ocena. Laboratorium 7

Systemy GIS Tworzenie zapytań w bazach danych

PHP + MySQL w laboratorium (1)

P o d s t a w y j ę z y k a S Q L

Bazy danych 6. Klucze obce. P. F. Góra

Autor: Joanna Karwowska

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Bazy danych Access KWERENDY

Połączenie z bazą danych : mysql h u root -p Enter password: *******

Aplikacje WWW - laboratorium

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Instrukcja do panelu administracyjnego. do zarządzania kontem FTP WebAs.

Bloki anonimowe w PL/SQL

Oracle PL/SQL. Paweł Rajba.

Podstawowe zapytania SELECT (na jednej tabeli)

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować:

11. PROFESJONALNE ZABEZPIECZENIE HASŁEM

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Programowanie w Ruby

Bazy Danych i Usługi Sieciowe

Przestrzenne bazy danych Podstawy języka SQL

Wprowadzenie do JDBC z wykorzystaniem bazy H2

PHP: bloki kodu, tablice, obiekty i formularze

Dr Michał Tanaś(

Transkrypt:

Architektura internetowej bazy danych Internetowa aplikacja bazodanowa opiera się na klasycznej architekturze internetowej bazy danych, przedstawionej na rysunku. Przeglądarka 1 2 3 Serwer Interpreter 6 WWW 5 4 Serwer MySQL Typowa transakcja bazodanowa przeprowadzana w Internecie składa się z następujących etapów: 1. Przeglądarka internetowa uŝytkownika wysyła Ŝądanie udostępnienia określonej strony WWW, wykorzystując odpowiedni formularz HTML. Natomiast strona z wynikami moŝe się nazywać rezultaty.php. 2. Serwer WWW przyjmuje Ŝądanie wyświetlenia strony rezultaty.php, odnajduje właściwy plik i przekazuje go do interpretera PHP. 3. Interpreter PHP rozpoczyna przetwarzanie skryptu. Wewnątrz skryptu zawarte jest polecenie połączenia z bazą danych i wykonania zapytania.

Z kolei następuje otwarcie połączenia z serwerem MySQL i przesłanie zapytania. 4. Serwer MySQL przyjmuje zapytanie i je przetwarza, po czym rezultat odsyła do interpretera PHP. 5. Interpreter kończy wykonywanie skryptu, który zazwyczaj formatuje otrzymane wyniki zgodnie ze standardem HTML, po czym przesyła wynikowy kod HTML do serwera WWW. 6. Serwer WWW przesyła wreszcie kod HTML do przeglądarki. Proces ten przebiega zawsze tak samo, bez względu na typ interpretera PHP, czy uŝywanego serwera bazy danych. Najczęściej serwer WWW, interpreter PHP i serwer bazy danych MySQL pracują na tym samym komputerze. Jednak metodę rozdzielenia serwera bazodanowego na oddzielną maszynę stosuje się do celów bezpieczeństwa lub zmniejszenia obciąŝenia systemu, co moŝe wpłynąć na efektywną wydajność całego systemu.

Polecenia PHP do obsługi bazy danych MySQL int mysql_affected_rows([int id_polaczenia]) - funkcja zwraca liczbę wierszy (rekordów) objętych poprzednio wykonaną operacją na bazie danych; funkcja odnosi się do operacji INSERT, UPDATE oraz DELETE, lecz nie dotyczy ona SELECT; w przypadku SELECT patrz funkcja mysql_num_rows(); w przypadku wykonania kwerendy usuwającej DELETE bez klauzuli WHERE, czyli usunięcie wszystkich rekordów, funkcja zwróci wartość 0, w przeciwnych wypadkach zostanie zwrócona wartość dodatnia; int mysql_change_user(string uzytkownik, string haslo [, string baza [, int id_polaczenia]]) - funkcja zmienia bieŝącego uŝytkownika dla bieŝącego połączenia lub połączenia określonego poprzez identyfikator połączenia id_polaczenia na uŝytkownika o nazwie uzytkownik oraz haśle haslo; jeśli zmiana się nie powiedzie aktywny zostaje uŝytkownik dotychczasowy;

int mysql_close([int id_polaczenia]) - funkcja zamyka połączenie z bieŝącą bazą danych lub bazą o identyfikatorze połączenia id_polaczenia; zwrócona wartość false świadczy o wystąpionym błędzie podczas zamykania połączenia; połączenie jest takŝe zamykane (jeśli oczywiście wcześniej nie zostało to zrobione) w momencie zakończenia wykonywania skryptu; int mysql_connect([string nazwa_hosta[:port]] [, string uzytkownik] [, string haslo]) - funkcja nawiązująca połączenie z serwerem bazy danych MySQL; w przypadku wystąpienia błędu funkcja zwraca łańcuch zawierający opis błędu; aby ukryć błąd moŝna przed nazwą funkcji dodać znak @; int mysql_create_db(string nazwa_bazy [, int id_polaczenia]) - funkcja tworząca bazę MySQL o nazwie nazwa_bazy dla połączenia o identyfikatorze id_polaczenia; istnieje jej takŝe inna (wcześniejsza) wersja, tj. mysql_createdb();

int mysql_data_seek(int id_wynikow, int numer_wiersza) - funkcja przesuwa wewnętrzny wskaźnik wyników do pozycji określonej przez numer_wiersza; w przypadku wystąpienia błędu zwrócona zostanie wratość false; int mysql_db_query(string nazwa_bazy, string zapytanie [, int id_polaczenia]) - funkcja wykonuje zapytanie na bazie danych i zwraca wynik zapytania lub w przypadku błędu wartość false; int mysql_drop_db(string nazwa_bazy [, int id_polaczenia]) - funkcja usuwa bazę o nazwie nazwa_bazy; w przypadku błędu zwracana jest wartość false; istnieje jej takŝe inna (wcześniejsza) wersja, tj. mysql_dropdb(); int mysql_errno([int id_polaczenia]) - funkcja zwraca numer błędu wynikłego podczas wykonywania poprzedniej operacji na bazie danych;

string mysql_error([int id_polaczenia]) - funkcja zwraca opis błędu (komunikat) wynikłego podczas wykonywania poprzedniej operacji na bazie danych; array mysql_fetch_array(int id_wynikow [, int typ_wyniku]) - funkcja zwraca wiersz (rekord) ze zbioru wyników w postaci tablicy asocjacyjnej lub wartość false, jeśli nie ma więcej wierszy (rekordów); funkcja jest rozszerzeniem funkcji mysql_fetch_row(); typ_wyniku moŝe przyjąc wartości MYSQL_ASSOC, MYSQL_NUM lub MYSQL_BOTH; object mysql_fetch_field(int id_wynikow [, int offset_pola]) - funkcja zwraca informacje o wskazanej kolumnie zbioru wyników w postaci obiektu; obiekt posiada następujące właściwości: name - nazwa kolumny table - nazwa tabeli do której naleŝy kolumna max_length - maksymalna długość kolumny

not_null - wartość 1 jeśli kolumna nie moŝe posiadać wartości NULL primary_key - wartość 1 jeśli kolumna jest kluczem podstawowym unique_key - wartość 1 jeśli kolumna jest kluczem unikalnym multiple_key - wartość 1 jeśli kolumna nie jest kluczem unikalnym numeric - wartość 1 jeśli kolumna zawiera wartości numeryczne blob - wartość 1 jeśli kolumna jest typu BLOB type - typ kolumny unsigned - wartość 1 jeśli kolumna zawiera wartości tylko dodatnie (bez znaku) zerofill - wartość 1 jeśli kolumna jest wypełniana wartościami zerowymi array mysql_fetch_lengths(int id_wynikow) - funkcja zwraca tablice zawierającą maksymalną długość danych, jakie moŝna zapisać w kaŝdej kolumnie wskazanego zbioru wyników o identyfikatorze id_wynikow; odnosi się do wiersza ostatnio zwróconego przez funkcje: mysql_fetch_row(), mysql_fetch_array() oraz mysql_fetch_object()

object mysql_fetch_object(int id_wynikow [, int typ_wyniku]) - funkcja zwraca obiekt zawierający wartości poszczególnych pól z wyniku zapytania przechowywanym pod identyfikatorem id_wynikow; dostęp do pola odbywa się następująco: $dane = mysql_fetch_object($wynik); echo ($dane->nazwa_pola); array mysql_fetch_row(int id_wynikow) - funkcja zwraca tablicę zawierającą wartości poszczególnych pól z wyniku zapytania przechowywanym pod identyfikatorem id_wynikow; dostęp do poszczególnych pól odbywa się poprzez podanie numeru pola, np.: $dane = mysql_fetch_row($wynik); echo ($dane[0]); string mysql_field_flags(int id_wynikow, int offset_pola) - funkcja zwraca flagi związane ze wskazanym polem offset_pola zbioru wyników o identyfikatorze;

id_wynikow w postaci łańcucha znakowego; są to pojedyncze słowa oddzielone pojedynczą spacją; int mysql_field_len(int id_wynikow, int offset_pola) - funkcja zwraca długość pola offset_pola; string mysql_field_name(int id_wynikow, int indeks_pola) - funkcja zwraca nazwę pola o numerze indeks_pola; int mysql_field_seek(int id_wynikow, int offset_pola) - funkcja przesuwa wskaźnik na pole o numerze offset_pola; string mysql_field_table(int id_wynikow, int offset_pola) - funkcja zwraca nazwę tabeli, w której znajduje się pole o numerze offset_pola;

string mysql_field_type(int id_wynikow, int offset_pola) - funkcja zwraca typ pola o numerze offset_pola; są to na przykład wartości: int, real, string, blob, itd.; int mysql_free_result(int id_wynikow) - funkcja zwalnia pamięć przeznaczoną na przechowywanie wyniku o identyfikatorze id_wyniku; funkcja jest takŝe wywoływana w momencie zakończenia wykonywania się skryptu, jeśli oczywiście nie była wywołana wcześniej; int mysql_insert_id([int id_polaczenia]) - funkcja zwraca ID wygenerowane dla pola AUTO_INCREMENT podczas poprzednio wykonanej operacji INSERT na bazie; int mysql_list_dbs([int id_polaczenia]) - funkcja zwraca listę baz danych dostępnych na serwerze MySQL;

int mysql_list_fields(string nazwa_bazy, string nazwa_tabeli [, int id_polaczenia]) - funkcja zwraca listę pól dostępnych w tabeli nazwa_tabeli w bazie o nazwie nazwa_bazy dla bieŝącego połączenia lub połączenia o identyfikatorze id_polaczenia; w przypadku wystąpienia błędu zwracana jest wartość -1; int mysql_list_tables(string nazwa_bazy [, int id_polaczenia]) - funkcja zwraca listę tabel znajdujących się w bazie nazwa_bazy; int mysql_num_fields(int id_wynikow) - funkcja zwraca wartość liczbową określającą ilość pól w wyniku o identyfikatorze id_wynikow; int mysql_num_rows(int id_wynikow) - funkcja zwraca wartość liczbową określającą ilość wierszy (rekordów) w wyniku o identyfikatorze id_wyniku;

int mysql_pconnect([string host[:port][:/sciezka/do/socketu]] [, string uzytkownik] [, string haslo]) - funkcja nawiązująca trwałe połączenie (niezamykane w czasie zakończenia wykonywania skryptu) z serwerem bazy danych MySQL; w przypadku wystąpienia błędu funkcja zwraca łańcuch zawierający opis błędu; aby ukryć błąd moŝna przed nazwą funkcji umieścić znak @; int mysql_query(string zapytanie [, int id_polaczenia]) - funkcja wysyła i wykonuje zapytanie SQL zapytanie na bazie danych; zapytanie nie powinno być zakończone średnikiem; w przypadku wystąpienia błędu (niemoŝliwości wykonania zapytania przez serwer MySQL) zwracana jest wartość false; int mysql_result(int id_wynikow, int wiersz [, mixed pole]) - funkcja zwraca wartość określonego pola pole w wierszu o numerze wiersz w zbiorze wyników o identyfikatorze id_wynikow; pole moŝe określać numer pola, jego nazwę lub przyjąć postać nazwa_tabeli.nazwa_pola;

int mysql_select_db(string nazwa_bazy [, int id_polaczenia]) - funkcja określa aktywną (domyślną) bazę danych; string mysql_tablename(int id_wynikow, int indeks) - funkcja zwraca nazwę tabeli, zwróconej przez funkcję mysql_list_tables() w postaci zbioru wyników w identyfikatorze id_wynikow, o ineksie (pozycji) indeks;

Przykład uŝycia powyŝszych funkcji /* nawiązanie połaczenia z bazą MySQL na komputerze o nazwie nazwa_hosta, dostęp do bazy jako uŝytkownik o nazwie user oraz haśle password */ $conn = mysql_connect("nazwa_hosta", "user", "password") or die("połączenie nie moŝe zostać nawiązane"); /* określenie nazwy bazy jako nazwa_bazy */ mysql_select_db("nazwa_bazy"); $sql_query = "SELECT * FROM tabela"; /* wykonanie zapytania zapisanego w zmiennej $sql_query i zapisane wyniku w $wynik */ $wynik = mysql_query($sql_query) or die("błędne zapytanie"); /* pętla pobierająca kolejno wiersze przechowywane w wyniku $wynik */ while ($row = mysql_fetch_array($wynik)) { /* pokazanie pola o nazwie nazwa_pola */ echo ($row["nazwa_pola"]."\n"); } /* zwolnienie pamięci zajmowanej na przechowanie rekordów */ mysql_free_result($wynik); /* zamknięcie połączenia z bazą danych */ mysql_close($conn);

Zapytania Aby wykonać cokolwiek w swojej bazie naleŝy wysłać do niej informacje, które wysyłane są do bazy danych w postaci zapytań (query). SłuŜy do tego funkcja mysql_query(zapytanie). Wszystkie zapytania wysyła sie w następujący sposób: $zaptanie="twoje zapytanie"; $wykonaj=mysql_query($zapytanie); Po takiej operacji zmienna $wykonaj będzie zawierać wartość TRUE, jeśli operacja powiedzie się, jeśli nie - zwróci wartość FALSE. Łączymy się z bazą danych Aby połączyć się z bazą danych uŝywamy komendy: mysql_connect (nazwa_hosta[:port] [, uŝytkownik] [,hasło]); W praktyce oznacza to, Ŝe wymagana jest nazwa hosta - następnie opcjonalnie moŝemy wpisać nazwę uŝytkownika oraz jego hasło. Jeśli nie podamy nazwy hosta automatycznie nastąpi próba połączenia się z localhostem. Jeśli zabraknie nazwy uŝytkownika automatycznie zostaniemy zalogowani jako właściciel procesu baz danych, przewaŝnie właściciel nie ma

ustawionego hasła, więc trzeci parametr nie jest wymagany. PoniŜszy przykład pokazuje jak połączyć się z serwerem mojserwer.pl jako uŝytkownik foo, z hasłem off: $sql = mysql_connect (mojserwer.pl, foo, off); Funkcja mysql_connect zwróci wartość TRUE, jeśli zakończy się sukcesem, jeśli nie powiedzie się - zwróci wartość FALSE. Jeśli zakończy się juŝ operacje w bazie naleŝy się z nią rozłączyć, co dokonuje się funkcją mysql_close(id_połączenia). Aby zakończyć połączenie, które zaprezentowane powyŝej, naleŝałoby zastosować komendę 'mysql_close' w następujący sposób: mysql_close($sql); Tworzenie nowej bazy oraz jej wybieranie Do stworzenia nowej bazy uŝywamy komendy mysql_create_db(nazwa) np.: mysql_create_db("zawodnicy"); Samo stworzenie bazy nie oznacza, Ŝe właśnie na niej będziemy wykonywać operacje, dlatego musimy ją wybrać, co robimy komendą mysql_select_db(nazwa) np.:

mysql_select_db("zawodnicy"); Od tej pory moŝna juŝ wykonywać róŝne operacje w bazie 'zawodnicy'. Zagadnienia SQL Bazę danych moŝemy stworzyć takŝe za pomocą wyraŝeń SQL w formie zapytania: $zapytanie="create DATABASE zawodnicy"; $wykonaj = mysql_query($zaptanie); Gdy baza zostanie juŝ utworzona moŝna zacząć wprowadzać do niej dane. Najpierw jednak trzeba utworzyć tabelę, robimy to wg następującego schematu składni SQL: CREATE TABLE nazwa_tabeli (nazwa1 typ1, nazwa2 typ2, PRIMARY KEY(nazwa_x)) Oto utworzenie tabeli według podanego schematu: $zapytanie = "CREATE TABLE nba (id char(3) NOT NULL, imie char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id))"; Rozpatrując powyŝszy przykład: klucz oznaczony jako PRIMARY KEY oznacza, Ŝe klucz ten jest kluczem głównym, a klucz główny nie moŝe się powtarzać - w

przypadku, gdyby klucz główny się powtórzył po prostu rekord nie zostanie dodany do tabeli, klucz oznaczony jako NOT NULL nie moŝe być pusty. Po utworzeniu tabeli, moŝna do niej dodać dane wg następującego schematu: INSERT INTO nazwa_tabeli VALUES (wartosc_pola1, wartosc_pola2, wartosc_pola3...) Nie zawsze trzeba wypełniać wszystkich pól, a dokonuje się tego w następujący sposób: INSERT INTO nazwa_tabeli (nazwa_pola1, nazwa_pola2) VALUES (wartosc_pola1, wartosc_pola2) Oto przykład dodania do tabeli nowego zawodnika, operacja ta wygląda tak: $zapytanie = "INSERT INTO nba VALUES(Jordan, 13, 32, 6)"; Po wykonaniu takiej operacji tabela 'nba' będzie juŝ zawierać jeden rekord. Teraz kolejno moŝna dodawać w ten sam sposób kolejne rekordy. Jeśli chcemy przeszukać naszą tabelę w poszukiwaniu jakiegoś konkretnego rekordu, robimy to za pomocą komendy SELECT wg schematu: SELECT nazwa_pola FROM nazwa_tabeli WHERE warunek

Oczywiście nazw pól moŝemy podać kilka, lub wszystkie - jednak zamiast tego po prostu wstawiamy znak gwiazdki (SELECT * FROM itd.), warunek moŝe być bardzo złoŝony. ZałóŜmy, Ŝe chcemy przeszukać naszą tabelę w poszukiwaniu zawodnika o nazwisku 'Pipen', dokonujemy tego w następujący sposób: $zapytanie = "SELECT imie FROM nba WHERE imie='pipen'"; Funkcja zwróci wartość TRUE jeśli znajdzie w naszej tabeli Pipena, jeśli nie - FALSE. NaleŜy pamiętaj jednak, Ŝe rozróŝniane są wielkie i małe litery, dlatego 'Pipen' to nie to samo, co 'pipen' czy 'PIPEN'... Jeśli jakiś rekord jest juŝ nieaktualny, lub po prostu źle wpisaliśmy dane, naleŝałoby go zaktualizować, do czego słuŝy komenda UPDATE: UPDATE nazwa_tabeli SET wartosc_pola WHERE warunek Aby zmienić w tabeli liczbę lat gry Jordana, naleŝy to zrobić tak: $zapytanie = "UPDATE nba SET lata=15 WHERE imie='jordan'"; Teraz Jordan grał juŝ 15, a nie tak jak wcześniej 13 lat. Jeśli jakieś dane z danej tabeli juŝ nas nie interesują pozbywamy się ich komendą DELETE:

DELETE FROM nazwa_tabeli [WHERE warunek] W powyŝszym przykładzie warunek wzięto w nawias, poniewaŝ jeśli nie zostanie podany warunek z tabeli, wówczas wszystkie rekordy zostaną wymazane. W praktyce kasowanie prezentuje się następująco: $zapytanie = "DELETE FROM nba WHERE imie=jordan"; Od tej chwili Jordana juŝ nie ma w tabeli zawodników nba. Jak wyświetlić wyniki przeszukiwania tabeli? Wyświetlanie wyników przeszukiwania tabeli odbywa się wg poniŝszego schematu: $zapytanie = "SELECT * FROM nazwa_tabeli"; $wykonaj = mysql_query($zaptanie); while($wiersz = mysql_fetch_array($wykonaj)) { print "Pole pierwsze".$wiersz['pole1']."<br>"; print "Pole drugie".$wiersz['pole2']."<br>"; print "Pole trzecie".$wiersz['pole3']."<br>"; } Wszystko to odbywa się dzięki komendzie 'mysql_fetch_array', której zadaniem jest pobieranie

wierszy ze zbioru wyników i zwracanie jej w postaci tablicy. Prosta wyszukiwarka Okazuje się, Ŝe wyszukiwarka jest niczym innym, jak uŝyciem operatora SELECT w połączeniu z operatorem LIKE. Tradycyjne uŝycie SELECT wygląda następująco: SELECT nazwy_pol FROM nazwa_tabeli WHERE warunek Jeśli w warunku zostanie zastosowany operator LIKE otrzymamy bardzo prostą wyszukiwarkę: SELECT nazwy_pol FROM nazwa_tabeli WHERE nazwa_pola LIKE '%szukane_wyraŝenie%' Operator LIKE słuŝy tutaj do przeszukiwania pól tekstowych w poszukiwaniu danego wyraŝenia, znak procenta przed i po wyraŝeniu odgrywa bardzo waŝną rolę - powoduje dopasowanie dowolnych znaków przed i po danym wyraŝeniu. Poszukiwane wyraŝenie 'nik' (zakładając, Ŝe znak procentu znajduje się przed i po wyraŝeniu tj. %nik%): Pasuje do niego np.: konik, nikt, nikogo, komornik, nikotyna. Jeśli nasze wyraŝenie zawierałoby procent tylko na początku (%nik), wówczas pasowałyby wyraz 'konik' i 'komornik' i inne wyrazy kończące się na 'nik',

poniewaŝ dopasowywane są tylko wyrazy zaczynające się dowolną liczbą dowolnych znaków, a kończących się na 'nik'. Natomiast wyrazy 'nikogo', 'nikt', 'nikotyna' nie pasowałyby, poniewaŝ 'nik' powinno być końcem wyrazu. Sytuację odwrotną uzyskamy, jeśli znak procentu postawimy na końcu wyraŝenia. Nawiązując do tabeli z zawodnikami NBA, moŝna np. przeszukać tabelę w poszukiwaniu wszystkich zawodników, w których imieniu i nazwisku występuje np. litera 'a'. WyraŜenie słuŝące przeszukaniu takiemu wyglądałoby następująco: $zapytanie = "SELECT * FROM nba WHERE imie LIKE \"%a%\""; Równie dobrze moŝna wyszukać wszystkich imion kończących się na 'a': $zapytanie = "SELECT * FROM nba WHERE imie LIKE \"%a\""; lub zaczynających się literą 'a': $zapytanie = "SELECT * FROM nba WHERE imie LIKE \"a%\""; Rozszerzenie wyszukiwarki Jak na razie nasze poszukiwania opierały się na wyszukiwaniu na tylko jednym warunku - jeśli jednak zechcemy wyszukać jakiejś danej, która zawiera więcej niŝ jeden warunek? W tym momencie z pomocą przychodzą nam dwa znane operatory z języka PHP 'AND' i 'OR' oraz dwa nowe 'BETWEEN' i 'IN'.

AND (moŝna równieŝ &&) - jest to operator, dzięki, któremu moŝna stworzyć złoŝone warunki, jego schemat wygląda następująco: instrukcja WHERE warunek1 AND warunek2 Funkcja zwróci wartość TRUE, jeśli obydwa warunki zostaną spełnione, jeśli jeden z nich lub oba nie zostaną spełnione funkcja zwróci wartość FALSE. OR (moŝna równieŝ ) - kolejny operator, dzięki, któremu moŝna stworzyć złoŝone warunki, jego schemat wygląda następująco: instrukcja WHERE warunek1 OR warunek2 Funkcja zwróci wartość TRUE, jeśli przynajmniej jeden z warunków zostanie spełniony, jeśli nie zostanie spełniony Ŝaden warunek funkcja zwróci wartość FALSE. IN - za pomocą tego operatora sprawdzamy czy dana wartość naleŝy do określonego zbioru. Elementy zbioru podaje się w nawiasach i oddziela przecinkami. Schemat: instrukcja WHERE nazwa_pola IN (1,2,5,8) Funkcja zwróci wartość TRUE, jeśli wartość danego pola będzie naleŝeć do określonego przez nas wcześniej zbioru - w tym przypadku, jeśli wartość będzie równa 1, 2, 3, lub 8. Jeśli chcemy np. sprawdzić czy wartość

naleŝy do jakiegoś przedziału to zamiast wypisywać cały zbiór przy uŝyciu operatora IN, moŝemy uŝyć operatora BETWEEN. BETWEEN - sprawdza czy dana wartość naleŝy do przedziału. Schemat: instrukcja WHERE nazwa_pola BETWEEN dolny_przedział AND gorny_przedział Jeśli chcielibyśmy teraz sprawdzić czy wartość pola naleŝy do przedziału od 4 do 259 to nasza instrukcja wyglądałaby następująco: WHERE nazwa_pola BETWEEN 4 AND 259 Łącząc powyŝsze operatory moŝna np. wyszukać wszystkich zawodników z tabeli, którzy grają co najmniej 10 do maksymalnie 15 lat, zbierają średnio co najmniej 20 punków na mecz i w swoim imieniu mają literę 'e'. Konstrukcja taka wyglądałaby następująco: $zapytanie = "SELECT * FROM nba WHERE imie (LIKE \"e\") AND (lata BETWEEN 10 AND 15) AND (punkty > 20)"; Sortowanie wyników Wyniki poszukiwań do tej pory były posortowane w takiej kolejności, w jakiej dodaliśmy je do bazy danych,

ale jeśli zechcielibyśmy posortować naszych graczy np. w kolejności alfabetycznej lub wg ilości punktów, jakie zdobywają na mecz? Do takiej operacji potrzebna będzie nam komenda ORDER BY wraz z komendą DESC. Schemat stosowania tych komend przedstawia się następująco: SELECT * FROM nazwa_tabeli ORDER BY nazwa_pola DESC Oczywiście moŝna sortować wg kilku pól, wtedy wymieniamy kolejne pola po przecinkach: SELECT * FROM nazwa_tabeli ORDER BY nazwa_pola1 DESC, nazwa_pola2 DESC, nazwa_pola3 DESC... Brak operatora DESC spowoduje wyświetlenie danych w kolejności odwrotnej do poŝądanej. Dla przykładu moŝna wyświetlić wszystkich zawodników z tabeli w kolejności alfabetycznej. Jeśli jednak znalazłoby się dwóch koszykarzy o identycznych personaliach kolejnym kryterium do ustawiania w kolejności będzie średnia ilość zdobywanych punków na mecz. SELECT * FROM nba ORDER BY imie DESC, punkty DESC

Elegancka analiza błędów Często nasz kod zawiera błędy. Jednak, jeśli nawet jakaś operacja się nie powiedzie my nie zostaniemy o tym poinformowani. Co zrobić, aby uniknąć takich sytuacji lub, chociaŝ odpowiednio je przeanalizować? Jeśli wykonanie zapytania, jakie wysłaliśmy do serwera nie powiedzie się funkcja mysql_query() zwróci wartość FALSE, w takim wypadku naleŝałoby odpowiednio wykorzystać fakt, Ŝe o ty wiemy. Funkcja mysql_error() zawiera treść błędu baz danych MySQL, jeśli takowy istnieje. Teraz w połączeniu z elementarną instrukcją If otrzymujemy bardzo potęŝne narzędzie słuŝące analizie błędów. PoniŜszy kawałek kodu przedstawia jak zatrzymywać program i wyświetlać komunikat błędu: $sql = mysql_connect (mojserwer.pl, foo, off); $zaptanie="twoje zapytanie"; if (!($wykonaj=mysql_query($zaptanie))) /* Sprawdza czy wykonanie powiodło się */ { $error = mysql_error($sql) ; /* Kopiuje zawartość błędu do zmiennej $error */ echo "Bład skryptu, odpowiedź serwera: $error"; /* Drukuje błąd na stronie */ } else /* Jeśli błąd nie wystąpił kontynuuje działanie programu */ { [ dalsze dzialanie programu ] }

Zamiast zatrzymywać działanie programu, moŝna po prostu w przypadku mniej powaŝnego błędu wyświetlać odpowiednią informację i dalej kontynuować program. Zliczanie pól w zbiorze wyników Komenda 'mysql_num_rows' słuŝy do zwracania ilości pól znajdujących się we wskazanym zbiorze wyników, stosujemy ją według następującego schematu: $zapytanie = "SELECT nazwy_pol FROM nazwa_tabeli WHERE warunek"; $wykonaj = mysql_query($zaptanie); $znaleziono = mysql_num_rows($wykonaj); Po wykonaniu tej operacji zmienna '$znaleziono' będzie zawierać liczbę wyszukiwanych elementów. Teraz moŝnawyświetlić: ile razy znaleziono poszukiwane wyraŝenie, a potem znalezione elementy. Przykład: $zapytanie = "SELECT * FROM nba WHERE imie LIKE \"%a%\" ORDER BY DESC"; $wykonaj = mysql_query($zaptanie); $znaleziono = mysql_num_rows($wykonaj); if ($znaleziono == "0") { print "Nie znaleziono Ŝadnego zawodnika z literą 'a' w imieniu"; } else

{ print "Znaleziono $znaleziono zawodników z literą 'a' w imieniu.<br><br>"; } while ($row = mysql_fetch_array($dzialaj)) { print "Imie zwodnika: <b>".$row['imie']." </b><br>lata gry: <b>".$row['imie']." </b>"; } Kasowanie baz danych Czasami zdarzy się tak, Ŝe zrezygnujemy nie tylko z kilku informacji zawartych w danej bazie, ale z całej bazy, wtedy kasujemy ją przy uŝyciu komendy mysql_drop_db. Dokonuje się tego w następujący sposób: mysql_drop_db (nazwa_bazy) W odniesieniu do naszego przykładu, skasowanie całej bazy danych z zawodnikami wyglądałoby tak: mysql_drob_db ("zawodnicy"); Informacje o tabeli W przypadku dostępu do tabeli, której nie jesteśmy twórcami, moŝna uzyskać o niej pewne informacje np. nazwy kolumn czy jaka jest maksymalna długość znaków w danym polu. Nazwy pól moŝemy wydobyć za pomocą komendy 'mysql_field_name' wg schematu:

mysql_field_name(id_wyników, indeks_pola) Rozpatrzmy to na przykładzie: $zapytanie = "SELECT * FROM nba"; $dzialaj=mysql_query($zapytanie); $n_pola = mysql_field_name($dzialaj, 0); Po wykonaniu tej operacji zmienna $n_pola będzie zawierać nazwę pierwszego pola (indeks 0) w tym przypadku zmienna zwróci wartość 'id' (takie jest pierwsze pole w tabeli nba). Maksymalną liczbę znaków danego pola wyciągamy komendą 'mysql_field_len' według następującego schematu: mysql_field_len(id_wyników, indeks_pola) Przykład: $zapytanie = "SELECT * FROM nba"; $dzialaj=mysql_query($zapytanie); $d_pola = mysql_field_len($dzialaj, 0); Zmienna '$d_pola' będzie zawierać liczbę '10', poniewaŝ pierwsze pole 'id' ograniczyliśmy długością 10 znaków. Nazwę tabeli, z której pochodzi wskazane pole moŝemy uzyskać korzystając z komendę 'mysql_field_table' w następujący sposób:

mysql_field_table(id_wyników, indeks_pola) Przykład: $zapytanie = "SELECT * FROM nba"; $dzialaj=mysql_query($zapytanie); $n_tabeli = mysql_field_table($dzialaj, 0); Zmienna '$n_tabeli' zwróci 'nba' czyli nazwę tabeli, z której pochodzi pole o indeksie zerowym. Aby dowiedzieć się, jakiego typu jest dane pole, trzeba uŝyć komendy 'mysql_field_type' analogicznie, jak poprzednie komendy tego typu: mysql_field_type(id_wyników, indeks_pola) Wykład zrealizowany w oparciu o literaturę: Luke Welling, Laura Thomson PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydawnictwo HELION 2003 http://krzychu.webmarketing.pl/ http://php.webhelp.pl/kursy/mysql/pliki/