Technologie internetowe II Wykład 4 – Typy danych i podstawowe polecenia MySQL. Interakcje PHP z MySQL, łączenie z bazą danych, operowanie na danych. Dr Krzysztof Heller
Technologie internetowe II Literatura Meloni J.C.: PHP, MySQL i Apache dla każdego. Wydanie III, Helion, 2007 Lis M.: PHP i MySQL dla każdego, Helion, 2005 Leszek 'leon' Krupiński: Wykłady internetowe, 2007 http://docs.wsei.pl/dydaktyka/Techn_Internet_II_wyklad4.ppt 19-12-2009 Technologie internetowe II
Technologie internetowe II Plan wykładu 4 Typy danych i podstawowe polecenia MySQL. Tworzenie, wybieranie i usuwanie rekordów. Interakcje PHP z MySQL. Łączenie z bazą danych. Operowanie na danych. 19-12-2009 Technologie internetowe II
Typy danych i podstawowe polecenia MySQL
Technologie internetowe II Liczbowe typy danych TINYINT 1-bajtowe pole, przechowujące wartości całkowite bez znaku z przedziału od 0 do 255 lub ze znakiem z przedziału od -127 do 127 SMALLINT 2-bajtowa wartość całkowita. Zakres wartości bez znaku od 0 do 65 535 lub ze znakiem od -32 768 do 32 768 MEDIUMINT 3-bajtowa wartość całkowita. Zakres wartości od 0 do 16 777 215 lub ze znakiem od -8 388 608 do 8 388 608 INT 4-bajtowa wartość całkowita. Zakres wartości ze znakiem od -2 147 483 648 do 2 147 483 647 lub bez znaku od 0 do 4 294 967 295 BIGINT 8-bajtowa wartość całkowita. Typ BIGINT jest używany podczas przeprowadzania obliczeń. Stosując pola tego typu we własnej bazie danych należy uważać, aby ich wartości nie były zbyt duże, ponieważ użyte w obliczeniach mogą doprowadzić do błędu przepełnienia 19-12-2009 Technologie internetowe II
Technologie internetowe II Liczbowe typy danych FLOAT (dokładność) Liczba zmiennoprzecinkowa z precyzją wyrażaną liczbą bajtów. Dwie wartości akceptowane jako precyzja to 4 i 8. Użycie 4 tworzy liczbę zmiennoprzecinkową o pojedynczej precyzji, natomiast 8 - liczbę zmiennoprzecinkową o podwójnej precyzji. Szczegóły dotyczące tych dwóch typów danych opisują pola FLOAT i DOUBLE FLOAT 4-bajtowa liczba zmiennoprzecinkowa z zakresu od -1.402823466E+38 do -1.175494351E-38, 0 i 1.175494351E-38 do 3.402823466E+38 DOUBLE 8-bajtowa liczba zmiennoprzecinkowa przechowująca wartości z zakresu od -1.7976931348623157E+308 do -2.2250738585072014E-308, 0, i 2.2250738585072014E-308 do 1.7976931348623157E+308 DECIMAL Pole zmiennoprzecinkowe o takiej samej pojemności jak DOUBLE. Liczba, zamiast zostać zredukowana do postaci szesnastkowej, pamiętana jest w formacie znakowym 19-12-2009 Technologie internetowe II
Technologie internetowe II Typy czasu i daty DATE Data (bez czasu), wyświetlana w formacie RRRR-MM-DD. Akceptuje daty w różnych formatach z zakresu od 1000-01-01 do 9999-12-31 DATETIME Pole daty z czasem dnia wyświetlane według formatu RRRR-MM-DD GG:MM:SS. Może przechowywać wartości z zakresu od 1000-01-01 00:00:00 do 9999-12-31 23:59:59 TIMESTAMP Data i czas liczony od początku epoki systemu UNIX, 1970-01-01 00:00:00, do momentu kiedy 32-bitowe pole przechowujące liczbę sekund, jaka upłynęła od tej daty ulegnie przepełnieniu w roku 2037. Jeśli polu temu nie została nadana wartość przez wyrażenie INSERT lub UPDATE, domyślnie otrzyma ono wartość daty bieżącej TIME Czas mieszczący się w przedziale od -838:59:59 do 838:59:59 YEAR Rok. Dozwolone wartości to przedział od 1901 do 2155 oraz wartość 0000. MySQL wyświetla wartość typu YEAR w formacie RRRR 19-12-2009 Technologie internetowe II
Technologie internetowe II Typy łańcuchowe CHAR Pole znakowe o stałej długości z zakresu od 1 do 255 bajtów. Po wstawieniu wartości puste miejsca pola CHAR są uzupełniane z prawej strony spacjami VARCHAR Pole znakowe o zmiennej długości z zakresu od 1 do 255 bajtów. Zajmowany jest jedynie taki obszar pamięci, jakiego wymaga wartość wstawiona w to pole TINYBLOB, TINYTEXT Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 255 bajtów BLOB, TEXT Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 65 535 bajtów 19-12-2009 Technologie internetowe II
Typy łańcuchowe MEDIUMBLOB, MEDIUMTEXT Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 16 777 215 bajtów LONGBLOB, LONGTEXT Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 4 294 967 295 bajtów ENUM('elem1', 'elem2', ...) Kolumna łańcuchowa, która może zawierać jedną z wartości wymienionych na liście wartości w definicji tej kolumny SET('elem1', 'elem2', ...) Kolumna łańcuchowa, która może zawierać dowolną liczbę wartości spośród wartości występujących na liście w definicji tej kolumny Typ SET jest podobny do typu ENUM w tym sensie, że definiowany jest jako lista, jednak typ SET jest przechowywany jako pełna wartość, a nie jako indeks do wartości, jak w przypadku typu ENUM. 19-12-2009 Technologie internetowe II
Tworzenie, wybieranie i usuwanie rekordów
Składnia tworzenia tabel Tabele zawierają pola, które określają jakie dane będzie zawierał pojedynczy rekord (inaczej: wiersz). Do utworzenia tabeli służy polecenie SQL CREATE TABLE: CREATE TABLE nazwa_tabeli struktura_tabeli; Każda tabela powinna posiadać swoją nazwę. Definiuje się ją w miejscu nazwa_tabeli. W miejsce struktura_tabeli wstawia się dokładną specyfikację poszczególnych pól, jakie powinna zawierać tabela. 19-12-2009 Technologie internetowe II
Technologie internetowe II Tworzenie tabeli CREATE TABLE pracownicy ( imie VARCHAR(30), nazwisko VARCHAR(30), data_urodzenia DATE, placa DECIMAL(10,2) ); Tworzy tablicę o strukturze: 19-12-2009 Technologie internetowe II
Technologie internetowe II Utworzona tabela Field Type Null Key Default Extra imie varchar(30) YES NULL nazwisko data_urodzenia date placa decimal(10,2) 19-12-2009 Technologie internetowe II
Definicje kolumn: opcje Opcje mogące wystąpić w definicji kolumny w instrukcji CREATE TABLE dzielą się na: opcje ogólne, które mogą być stosowane do (prawie) wszystkich typów kolumn opcje szczególne, stosujące się do niektórych (klas) typów. Opcje szczególne muszą być podane w pierwszej kolejności (bezpośrednio po określeniu typu). Niektóre z tych opcji wykluczają się wzajemnie, np. PRIMARY KEY i NULL. 19-12-2009 Technologie internetowe II
Definicje kolumn: opcje PRIMARY KEY: określa daną kolumnę jako klucz główny tabeli. Tabela może posiadać tylko jeden klucz główny. DEFAULT wartość_domyślna: określa wartość domyślną kolumny dla nowo wprowadzanych wierszy w przypadku, gdy instrukcja tworząca nowy wiersz nie zadaje tej wartości. Jeśli w definicji kolumny pominięto opcję DEFAULT (oraz nie podano opcji NOT NULL), to w takich wypadkach wartością domyślną jest NULL. Jeżeli natomiat kolumna bez opcji DEFAULT została zadeklarowana jakoNOT NULL, to w miejsce brakującej wartości zostanie automatycznie wprowadzona przez MySQL wartość domyślna zależna od typu. NOT NULL | NULL: określa, czy NULL jest dopuszczalną wartością w tej kolumnie. Domyślnie wartość NULL jest dopuszczalna, za wyjątkiem kluczy (kolumn indeksowanych). AUTO_INCREMENT: opcja ta ma sens dla kolumn o numerycznych typach wartości. Oznacza ona, że jeżeli przy tworzeniu wiersza nie zada się jawnie wartości dla tej kolumny (lub zostanie podana wartość NULL bądź zero), to wartością zapisaną będzie największa z wcześniej występujących w tej kolumnie powiększona o jeden. 19-12-2009 Technologie internetowe II
Definicje kolumn: opcje UNSIGNED: opcja ta stosuje się do typów numerycznych i oznacza, że dopuszczone są wyłącznie wartości nieujemne. Zastosowanie jej zwiększa również zakres dopuszczalnych wartości (dodatnich) w sposób zależny od konkretnego typu numerycznego. ZEROFILL: stosuje się do typów opisujących liczby całkowite. Powoduje dopełnienie pola danych zerami do jego maksymalnej długości. BINARY: stosuje się do typów CHAR i VARCHAR. W MySQL sortowanie i porównywanie wartości znakowych odbywa się domyślnie z utożsamieniem małych i wielkich liter (zgodnie z kodowaniem ISO-8859-1). Opcja BINARY wyłącza to utożsamienie dla danej kolumny. 19-12-2009 Technologie internetowe II
Definicja tabeli: deklaracje dodatkowe PRIMARY KEY (nazwa_kolumny_indeksowej, ...): klucz główny w tabeli może być tylko jeden, ale może obejmować więcej niż jedną kolumnę. Wówczas cały zestaw wartości z odpowiednich kolumn traktowany jest jako wartość klucza głównego. KEY [nazwa_indeksu] (nazwa_kolumny_indeksowej, ..): deklaruje indeksowanie ze względu na wartości z odpowiednich kolumn. Indeks może być nazwany (zgodnie z wcześniej omówionymi regułami tworzenia nazw). Wartości klucza indeksowania nie mogą być NULL. W MySQL istnieje możliwość zadeklarowania długości klucza indeksowania, w postacikolumna(długość), mniejszej niż długość pola danych odpowiedniej kolumny. Wówczas do tworzenia indeksu wykorzystana jest jedynie część pola danych, co owocuje czasami o wiele mniejszymi (w sensie zużycia miejsca na dysku) i szybciej przeszukiwanymi indeksami. Kolumna typu BLOB nie może być indeksowana. INDEX [nazwa_indeksu] (nazwa_kolumny_indeksowej, ...): deklaracja ta jest synonimem dla KEY. UNIQUE [nazwa_indeksu] (nazwa_kolumny_indeksowej, ...): deklaruje indeks o nie powtarzających się wartościach. 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie INSERT Polecenie INSERT służy do wypełnienia tabeli danymi po utworzeniu. INSERT INTO pracownicy VALUES ('Jan', 'Kowalski', '2002-07-20', '1200.00'); Powyższe polecenie wstawi pojedynczy rekord do tabeli pracownicy. Aby wstawić kolejne rekordy należy ponowić powyższe zapytanie używając nowych danych: INSERT INTO pracownicy VALUES ('Aleksander', 'Borowiecki', '1952-08-06', '1500.34'); INSERT INTO pracownicy VALUES ('Aniela', 'Michałkowska', '1970-05-23', '854.29'); INSERT INTO pracownicy VALUES ('Katarzyna', 'Kowalska', '2002-07-02', '1200.00'); Polecenia INSERT można użyć także w innej formie. Za nazwą tabeli można wyspecyfikować listę pól, które będzią wypełniane danymi. Pozostałe pola przyjmą puste lub standardowe wartości. Zapytanie z wyspecyfikowaną listą pól wygląda następująco: INSERT INTO pracownicy (imie, nazwisko) VALUES ('Izabela', 'Kwiatkowska'); 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie SELECT Aby pobrać dane zapisane w tabeli należy użyć zapytania SELECT. Jego postać ogólna prezentuje się następująco: SELECT co_zaprezentować FROM nazwa_tabeli [WHERE warunki_wyszukiwania] [ORDER BY sortowanie [ASC | DESC], ...] [LIMIT [ofset,] ilość_wierszy]; W miejscu co_zaprezentować należy podać (po przecinku) listę kolumn, które mają być w zestawieniu. W miejscu nazwa_tabeli podać nazwę tabeli, z której mają być pobierane dane. 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie SELECT Wybór trzech kolumn do zestawienia z tabeli pracownicy wygląda następująco: SELECT imie, nazwisko, placa FROM pracownicy; Spowoduje to wyświetlenie wszystkich rekordów, jednak w zestawieniu zostaną zaprezentowane jedynie wartości trzech pól: imie, nazwisko i placa Aby w zestawieniu umieścić wszystkie pola można użyć w miejscu co_zaprezentować znaku '*' (gwiazdki): SELECT * FROM pracownicy; 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie SELECT Dzięki klauzuli WHERE można wpłynąć na zakres prezentowanych danych - dokładnie definiować co chce się uzyskać swoim zapytaniem. Klauzulę WHERE stosuje się najczęściej w poleceniu SELECT. Ma ona jednak zastosowanie także w innych poleceniach operujących na danych, takich jak UPDATE, DELETE itp. Stosując operatory przyrównania można dokładnie określić, jakie informacje chce się pobrać. Dozwolone w MySQL operatory przyrównania to: = równe > większe >= większe równe < mniejsze <= mniejsze równe <> lub != różne LIKE służy głównie do porównywania danych łańcuchowych 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie SELECT Przykłady zastosowania: SELECT * FROM pracownicy WHERE placa >= 1000; Spowoduje wyświetlenie listy pracowników, których płaca jest większa lub równa 1000: SELECT imie, nazwisko, placa FROM pracownicy WHERE nazwisko = 'Kowalski'; Spowoduje wyświetlenie danych (tylko imię, nazwisko i placa) wszystkich pracowników, których nazwisko brzmi dokładnie Kowalski: SELECT * FROM pracownicy WHERE nazwisko LIKE 'K%'; Spowoduje wyświetlenie wszystkich pracowników, których nazwisko rozpoczyna się na literę 'K': 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie SELECT Dzięki zastosowaniu znaków globalnych (% i _) istnieje możliwość przyrównania do dowolnego ciągu znaków. Znak '%' (procent) zastępuje dowolną ilość znaków. Znak '_' (podkreślenie) zastępuje dokładnie jeden znak. Zapytanie: SELECT imie, nazwisko FROM pracownicy WHERE nazwisko LIKE 'Kowalsk_'; spowoduje wyświetlenie wszystkich pracowników, których nazwisko zaczyna się ciągiem znaków 'Kowalsk' i zaraz po nim występuje jeden dowolny znak. Warunki wyboru podawane za WHERE można łączyć ze sobą stosując operatory AND oraz OR. Dzięki temu istnieje możliwość zbudowania zapytania bardziej złożonego, a co za tym idzie bardziej dokładnego. Wydając zapytanie: SELECT * FROM pracownicy WHERE (placa > 500 AND placa < 1000) OR nazwisko = 'Kowalski'; spowoduje wyświetlenie w wyniku wszystkich pracowników, których płaca mieści się w zakresie 500-1000 oraz pracowników o nazwisku 'Kowalski': 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie SELECT Dane w tabeli mogą być przechowywane w dowolnej kolejności. Można jednak spowodować ich pobranie w ściśle określonym porządku. Kolumny, według których MySQL ma posortować dane podaje się po klauzuli ORDER BYoddzielone przecinkami. Chcąc uszeregować listę pracowników rosnąco według nazwiska i malejąco według płacy należy wydać następujące polecenie: SELECT * FROM pracownicy ORDER BY nazwisko ASC, placa DESC; ASC oznacza sortowanie rosnąco według podanego pola, DESC natomiast oznacza sortowanie malejące 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie SELECT Użycie klauzuli LIMIT spowoduje wyświetlenie jedynie części rekordów. Aby pobrać dwa pierwsze rekordy napisz SELECT * FROM pracownicy LIMIT 2; Wypełniając pole ofset wyświetla się podaną ilość rekordów od pewnego miejsca w tabeli. Chcąc pobrać rekordy od 3 do 7 należy napisać: SELECT * FROM pracownicy LIMIT 2, 5; Spowoduje to wyświetlenie pięciu rekordów (o ile tyle istnieje w bazie) poczynając od rekordu trzeciego. MySQL pozwala na połączenie ze sobą wielu opcji, dzięki którym można bardzo dokładnie zawęzić poszukiwaną ilość informacji. Przykład bardziej złożonego zapytania można przedstawić następująco: SELECT imie, nazwisko, placa FROM pracownicy WHERE placa >= 500 AND placa < 1200 ORDER BY nazwisko LIMIT 5; Jak widać połączono w tym momencie warunek wyboru według płacy pomiędzy 500 a 1200 z sortowaniem danych według nazwiska i ograniczeniem wyniku tylko do pięciu pierwszych rekordów. 19-12-2009 Technologie internetowe II
Polecenie SELECT – kilka tabel Tabele: owoc, kolor ID Nazwa_owocu 1 jabłko 2 pomarańcza 3 banan ID Nazwa_koloru 1 czerwony 2 pomarańczowy 3 żółty 19-12-2009 Technologie internetowe II
Polecenie SELECT – kilka tabel ID SELECT * FROM owoc, kolor ID nazwa_owocu ID nazwa_koloru 1 jabłko 1 czerwony 2 pomarańcza 1 czerwony 3 banan 1 czerwony 1 jabłko 2 pomarańczowy 2 pomarańcza 2 pomarańczowy 3 banan 2 pomarańczowy 1 jabłko 3 żółty 2 pomarańcza 3 żółty 3 banan 3 żółty 19-12-2009 Technologie internetowe II
Polecenie SELECT – kilka tabel SELECT Nazwa_owocu, Nazwa_koloru FROM owoc, kolor WHERE owoc.id=kolor.id jabłko czerwony pomarańcza pomarańczowy banan żółty 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie JOIN SELECT Nazwa_owocu, Nazwa_koloru FROM owoc -> INNER JOIN kolor ON owoc.id=kolor.id LEFT JOIN – zwraca wiersze w pierwszej tabeli niezależnie od istnienia wierszy w drugiej tabeli RIGHT JOIN – jak LEFT JOIN, ale kolejność odwrotna Są jeszcze CROSS JOIN, STRAIGHT JOIN, NATURAL JOIN i inne Zastępuje WHERE 19-12-2009 Technologie internetowe II
Technologie internetowe II Podselekcja SELECT wyrażenia i kolumny FROM nazwa_tabeli WHERE wybrana_kolumna (PODSELEKCJA) Podselekcja musi występować w nawiasach Można uzywać z SELECT, INSERT, UPDATE, DELETE, SET, DO 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie UPDATE Polecenie UPDATE służy do modyfikacji danych już wcześniej umieszczonych w tabeli. Jego składnia jest następująca: UPDATE nazwa_tabeli SET nazwa_pola='nowa_wartość'; Po słowie kluczowym SET kolejno (po przecinku) podaje się nazwy kolumn wraz z nowymi wartościami, jakie powinny przyjąć. Po wydaniu poniższego polecenia: UPDATE pracownicy SET imie='Zofia'; wszystkie rekordy w polu imie będą miały wartość 'Zofia': 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie UPDATE Zazwyczaj chcemy zmienić dane dotyczące tylko jednego lub wybranych rekordów. Do określenia czego ma dotyczyć zmiana służy klauzula WHERE podawana na końcu polecenia UPDATE. W celu zmiany imienia tylko dla Izabeli Kwiatkowskiej polecenie UPDATE będzie wyglądać następująco: UPDATE pracownicy SET imie='Zofia' WHERE nazwisko='Kwiatkowska'; 19-12-2009 Technologie internetowe II
Technologie internetowe II Polecenie DELETE Do usunięcia danych z tabeli służy polecenie DELETE. Aby usunąć wszystkie dane z tabeli należy wydać polecenie: DELETE FROM nazwa_tabeli; Można użyć także opisywanego już wcześniej warunku wyboru, do wyspecyfikowania danych przeznaczonych do usunięcia. Aby usunąć z przykładowej tabeli pracownicy wszystkie rekordy, w których płaca jest wyższa od 1000 należy wydać następujące polecenie: DELETE FROM pracownicy WHERE placa > 1000; 19-12-2009 Technologie internetowe II
Funkcje operujące na datach HOUR() HOUR(kolumna) Zwraca samą godzinę ze wskazanej daty MINUTE() MINUTE(kolumna) Zwraca same minuty ze wskazanej daty. SECOND() SECOND(kolumna) Zwraca same sekundy ze wskazanej daty. DAYNAME() DAYNAME(kolumna) Zwraca nazwę dnia tygodnia. DAYOFMONTH() DAYOFMONTH(kolumna) Zwraca sam dzień miesiąca ze wskazanej daty (wyrażone liczbą). MONTHNAME() MONTHNAME(kolumna) Zwraca nazwę miesiąca występującego we wskazanej dacie. MONTH() MONTH(kolumna) Zwraca sam miesiąc ze wskazanej daty (wyrażony liczbą). YEAR() YEAR(kolumna) Zwraca sam rok ze wskazanej daty. 19-12-2009 Technologie internetowe II
Funkcje operujące na datach ADDDATE() ADDDATE(kolumna INTERVAL x typ) Dodaje do daty przechowywanej w kolumnie x jednostek i zwraca wynik. SUBDATE() SUBDATE(kolumna INTERVAL x typ) Odejmuje od daty przechowywanej w kolumnie x jednostek i zwraca wynik. CURDATE() Zwraca bieżącą datę. CURTIME() Zwraca bieżący czas. NOW() Zwraca bieżącą datę i czas. UNIX_TIMESTAMP() UNIX_TIMESTAMP(data) Zwraca liczbę sekund jaka upłynęła od początku tzw. epoki unixa lub od wskazanej daty. 19-12-2009 Technologie internetowe II
Technologie internetowe II Obliczenia na datach Funkcja ADDDATE() i SUBDATE(), będące synonimami DATE_ADD() i DATE_SUB(), przeprowadzają obliczenia na datach. Ich składnia jest następująca: ADDDATE(data, INTERVAL x typ) Data może pochodzić z kolumny tabeli lub może być wprowadzona ręcznie. Wartość x jest różna dla każdego typu. Dostępne typy to: SECOND, MINUTE, HOUR, DAY, MONTH i YEAR. Mogą one tez występować w nast. następujących kombinacjach: MINUTE_SECOND, HOUR_MINUTE, DAY_HOUR, oraz YEARS_MONTH. 19-12-2009 Technologie internetowe II
Technologie internetowe II Obliczenia na datach Aby dodać do wskazanej daty dwie godziny: ADDATE(data, INTERVAL 2 HOUR) Aby dodać dwa tygodnie do 31 grudnia 2002: ADDATE(`2002-12-31`, INTERVAL 14 DAY) Aby odjąć od daty 15 miesięcy, wpisz: SUBDATE(data, INTERVAL `1-3` YEAR_MONTH) Ostatnie zapytanie informuje system, że chcesz odjąć od wartości przechowywanej w kolumnie jeden rok i trzy miesiące. 19-12-2009 Technologie internetowe II
Interakcje PHP z MySQL
Warunki wykorzystania bazy danych Istnienie działającej bazy danych w miejscu, które jest osiągalne przez serwer WWW. Posiadanie dostępu (użytkownik i hasło) z odpowiednimi uprawnieniami. Istnienie bazy danych (chyba, że ją tworzymy). Używamy funkcji z rodziny mysqli 19-12-2009 Technologie internetowe II
Łączenie z bazą danych
Połączenie z bazą danych Tworzenie nowego połączenia <?php $mysqli = mysqli_connect("localhost", "uzytkownik", "haslo”, "baza"); if (mysqli_connect_errno()) { printf("Nie moża się połączyć: %s\n", mysqli_connect_error()); exit(); } else { printf("Informacje o hoście: %s\n", mysqli_get_host_info($mysqli)); } ?> Sprawdzamy błąd Pobieramy komunikat błędu Pobieramy informacje o hoście 19-12-2009 Technologie internetowe II
Połączenie z bazą danych <?php $mysqli = mysqli_connect("localhost", "uzytkownik", "haslo”, "baza"); if (mysqli_connect_errno()) { printf("Nie moża się połączyć: %s\n", mysqli_connect_error()); exit(); } else { printf("Informacje o hoście: %s\n", mysqli_get_host_info($mysqli)); mysqli_close($mysqli); } ?> Połączenie lepiej zamknąć, choć jest zamykane automatycznie 19-12-2009 Technologie internetowe II
Utworzenie bazy danych <?php $mysqli = mysqli_connect("localhost", "uzytkownik", "haslo”, "baza"); if (mysqli_connect_errno()) { printf("Nie moża się połączyć: %s\n", mysqli_connect_error()); exit(); } else { $sql = "CREATE TABLE tabelaProbna (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, poleProbne VARCHAR (75))"; $rez = mysqli_query($mysqli, $sql); if ($rez === TRUE) { echo "Tabela tabelaProbna została utworzona."; printf("Nie można utworzyć tabeli: %s\n", mysqli_error($mysqli)); } mysqli_close($mysqli); ?> Treść zapytania przypisujemy zmiennej Średnik nie jest obowiązkowy Weryfikujemy utworzenie tabeli 19-12-2009 Technologie internetowe II
Operowanie na danych
Wstawianie rekordów <?php $mysqli = mysqli_connect("localhost", "uzytkownik", "haslo”, "baza"); if (mysqli_connect_errno()) { printf("Nie moża się połączyć: %s\n", mysqli_connect_error()); exit(); } else { $sql = "INSERT INTO tabelaProbna (poleProbne) VALUES ('some value')"; $rez = mysqli_query($mysqli, $sql); if ($rez === TRUE) { echo "Wstawiono rekord."; printf("Nie można wstawić rekordu: %s\n", mysqli_error($mysqli)); } mysqli_close($mysqli); ?> Tutaj wstawiamy kolejny wiersz do tabeli – stała wartość 19-12-2009 Technologie internetowe II
Formularz do wprowadzania danych <html> <head> <title>Formularz wstawiania rekordów</title> </head> <body> <form action="insert.php" method="POST"> <p>Tekst do dodania:<br> <input type="text" name="poleProbne" size="30"> <p><input type="submit" name="submit" value="wstaw rekord"></p> </form> </body> </html> 19-12-2009 Technologie internetowe II
Uzupełnianie bazy danych <?php $mysqli = mysqli_connect("localhost", "uzytkownik", "haslo”, "baza"); if (mysqli_connect_errno()) { printf("Nie moża się połączyć: %s\n", mysqli_connect_error()); exit(); } else { $sql = "INSERT INTO tabelaProbna (poleProbne) VALUES ('".$_POST["poleProbne"]."')"; $rez = mysqli_query($mysqli, $sql); if ($rez === TRUE) { echo "Wstawiono rekord."; printf("Nie można wstawić rekordu: %s\n", mysqli_error($mysqli)); } mysqli_close($mysqli); ?> Tutaj wstawiamy kolejny wiersz do tabeli – wartość z formularza 19-12-2009 Technologie internetowe II
Wybieranie rekordów <?php $mysqli = mysqli_connect("localhost", "uzytkownik", "haslo”, "baza"); if (mysqli_connect_errno()) { printf("Nie moża się połączyć: %s\n", mysqli_connect_error()); exit(); } else { $sql = "SELECT * FROM tabelaProbna"; $rez = mysqli_query($mysqli, $sql); if ($rez) { $liczba_wierszy = mysqli_num_rows($rez); printf("Liczba wierszy w tabeli: %d\n", $liczba_wierszy); printf("Nie można pobrać rekordów: %s\n", mysqli_error($mysqli)); } mysqli_free_result($rez); mysqli_close($mysqli); ?> Pobiera liczbę wierszy w zbiorze wyników zwróconych przez bazę Zwalnia zasoby pamięci zajmowane przez zapytanie 19-12-2009 Technologie internetowe II
Wybieranie rekordów <?php $mysqli = mysqli_connect("localhost", "uzytkownik", "haslo”, "baza"); if (mysqli_connect_errno()) { printf("Nie moża się połączyć: %s\n", mysqli_connect_error()); exit(); } else { $sql = "SELECT * FROM tabelaProbna"; $rez = mysqli_query($mysqli, $sql); if ($rez) { while ($newArray = mysqli_fetch_array($rez, MYSQLI_ASSOC)) { $id = $newArray['id']; $poleProbne = $newArray['poleProbne']; echo "Identyfikator to ".$id." a tekst to ".$poleProbne."<br/>"; } printf("Nie można pobrać rekordów: %s\n", mysqli_error($mysqli)); mysqli_free_result($rez); mysqli_close($mysqli); ?> WHILE przechodzi przez wszystkie rekordy zbioru wyników 19-12-2009 Technologie internetowe II