Z czego składa się baza danych: baza, tabela, wiersz, kolumna
Funkcja mysqli_connect() łączy PHP z serwerem bazy danych
Sprawdzamy, czy połączenie się udało
Ćwiczenie: pierwszy plik PHP, który łączy się z bazą shop
Rozgrzewka · 3 minuty
Rozgrzewka: formularze i sprawdzanie danych
Co robi funkcja empty($field)?
Jaki filtr w filter_var() sprawdza poprawność adresu e-mail?
Dlaczego sprawdzenie danych z formularza musi być przed ich dalszym przetwarzaniem, nie po nim?
Część 1 · Z czego składa się baza danych
Baza, tabela, wiersz, kolumna
Baza danych to zbiór tabel. Tabela to zbiór wierszy o tej samej strukturze - jak arkusz kalkulacyjny. Wiersz to jeden rekord, np. jeden produkt. Kolumna to jedna cecha, którą ma każdy wiersz w tabeli, np. cena. Porównanie z życia: baza danych jest jak szafa na akta - szafa ma szuflady (tabele), w szufladzie leżą teczki (wiersze), a każda teczka ma te same rubryki do wypełnienia (kolumny).
MariaDB KB: create-table (mariadb.com/kb/en/create-table/) - tabela = nazwa, kolumny, dane w wierszach · phpMyAdmin: docs.phpmyadmin.net/en/latest/intro.html
Część 2 · Kto z kim rozmawia
Przeglądarka → Apache/PHP → MariaDB
Przeglądarka nigdy nie rozmawia z bazą danych wprost. Żąda strony od Apache. Apache uruchamia nasz plik PHP. Dopiero PHP - funkcją mysqli_connect() - łączy się z MariaDB, pobiera albo zapisuje dane i buduje z nich gotowy HTML, który wraca do przeglądarki.
Zanim PHP połączy się z bazą, w XAMPP Control Panel musi świecić na zielono nie tylko Apache, ale i MySQL (to przycisk do MariaDB - nazwa z panelu została z czasów, gdy XAMPP używał MySQL). phpMyAdmin to osobne narzędzie w przeglądarce do zarządzania tą samą bazą: w nim zakładamy bazę shop, zanim uruchomimy pierwszy plik PHP.
Ciekawostka z PHP Manual: litera „i” w nazwie mysqli oznacza „improved”, czyli ulepszone. To osobne rozszerzenie PHP do MySQL, nowsze i bogatsze w funkcje niż starsze narzędzia do tej samej bazy.
phpMyAdmin: „phpMyAdmin is a free software tool written in PHP that is intended to handle the administration of a MySQL or MariaDB database server.” (docs.phpmyadmin.net/en/latest/intro.html) · ciekawostka: „The mysqli extension, or as it is sometimes known, the MySQL improved extension, was developed to take advantage of new features found in MySQL systems versions 4.1.3 and newer.” (php.net/manual/en/mysqli.overview.php)
Część 4 · Funkcja mysqli_connect()
Cztery parametry: host, user, hasło, baza
PHP Manual: „mysqli_connect: Open a new connection to the MySQL server”. Funkcja przyjmuje po kolei adres serwera, nazwę użytkownika, hasło i nazwę bazy, a zwraca obiekt połączenia albo false, gdy się nie uda.
PHP Manual: „mysqli_connect: Open a new connection to the MySQL server”; „mysqli_connect() returns an object which represents the connection to a MySQL Server, or false on failure” · php.net/manual/en/mysqli.construct.php
Część 5 · Kod na żywo
Sprawdzamy połączenie: if (!$db) die()
Zmienna $db po nieudanym połączeniu ma wartość false, czyli w warunku if zachowuje się jak „nie”. if (!$db) die(...) działa więc jak wyłącznik bezpieczeństwa: gdy baza jest nieosiągalna, strona od razu się zatrzymuje z czytelnym komunikatem, zamiast próbować dalej z niedziałającym połączeniem.
// connect-database.phpmysqli_report(MYSQLI_REPORT_OFF);
$db = mysqli_connect("localhost", "root", "", "shop");
if (!$db) {
die("Błąd połączenia z bazą danych.");
}
echo"Połączono z bazą.";
Uwaga PHP 8.4: bez pierwszej linii (mysqli_report(MYSQLI_REPORT_OFF)) nieudane połączenie rzuca wyjątek zamiast zwracać false i if (!$db) nigdy się nie wykona - sprawdzone lokalnie.
PHP Manual: mysqli.construct.php („Errors/Exceptions”: przy trybie MYSQLI_REPORT_STRICT zgłaszany jest mysqli_sql_exception)
Egzamin INF.03
Tak pytają na egzaminie
1.$db = mysqli_connect("localhost", "root", "qwerty", "baza1"); if ( !$db ) { … } Przedstawiony kod PHP nawiązuje połączenie z serwerem bazy danych. Jakiego typu operacje powinny się znaleźć w instrukcji warunkowej w miejscu trzech kropek?
Zamknięcie bazy danych.
Obsługa błędu połączenia.
Obsługa danych pobranych z bazy.
Komunikat o pomyślnym połączeniu z bazą.
2.mysqli_connect($a, $b, $c, $d) or die('Brak połączenia z serwerem MySQL.'); Jakie wartości muszą przyjmować zmienne w funkcji biblioteki mysqli, aby połączyć się z serwerem i bazą danych?
adres serwera - $a, nazwa bazy danych - $b, login - $c, hasło - $d
adres serwera - $c, nazwa bazy danych - $d, login - $a, hasło - $b
adres serwera - $c, nazwa bazy danych - $d, login - $b, hasło - $a
adres serwera - $a, nazwa bazy danych - $d, login - $b, hasło - $c
CKE, EE.09, styczeń 2020, zadanie 38 · CKE, E.14, czerwiec 2019, zadanie 40
Ćwiczenie przy komputerze · 15 minut
Ćwiczenie: pierwsze połączenie z bazą
Uruchom XAMPP Control Panel, sprawdź, że Apache i MySQL świecą na zielono.
Otwórz localhost/phpmyadmin, załóż nową bazę o nazwie shop.
W folderze swojego serwera (np. htdocs) utwórz plik connect-database.php z mysqli_connect("localhost", "root", "", "shop") i sprawdzeniem if (!$db) die(...) (patrz slajd z kodem).
Otwórz plik w przeglądarce pod adresem localhost/connect-database.php - ma pokazać „Połączono z bazą.”.
Dla chętnych: zapisz plik w swoim repozytorium - commit „Dodaje connect-database.php” i push.
Ma się pojawić: „Połączono z bazą.” w przeglądarce. Jeśli widzisz błąd - sprawdź, czy MySQL w XAMPP Control Panel jest uruchomiony i czy baza shop istnieje w phpMyAdmin.
Na koniec
Sprawdź się
Jakie są cztery pierwsze parametry funkcji mysqli_connect() i w jakiej kolejności?
Co zwraca mysqli_connect(), gdy połączenie się nie uda?
Po co w phpMyAdmin zakładamy bazę shop, zanim uruchomimy connect-database.php?
Na następnej lekcji: pobieramy dane z bazy zapytaniem SELECT.
Poza szkołą
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
mysqli_connect() wywołane wprost w każdym pliku, który potrzebuje bazy
Frameworki (np. Laravel) łączą się z bazą raz, przez ORM (kod, który sam zamienia dane PHP na zapytania SQL), w jednym pliku konfiguracji - reszta kodu o tym nie wie.
zastępowane (frameworkiem)
Login root i puste hasło wpisane wprost w kodzie
Dane dostępowe do bazy trzymane w osobnym pliku zmiennych środowiskowych (np. .env), nigdy w repozytorium.
zastępowane (zmienne środowiskowe)
phpMyAdmin do ręcznego zakładania bazy i tabel
Strukturę bazy opisuje się kodem (migracje), który da się uruchomić na dowolnym serwerze; phpMyAdmin służy głównie do podglądu.
nadal w użyciu (do podglądu)
Konto bazy danych bez hasła
Każde konto do bazy ma osobne, silne hasło; konto root bez hasła jest tylko do nauki na własnym komputerze.