Jeśli dopiero zaczynasz swoją przygodę z PHP i bazami danych MySQL, to pewnie zastanawiasz się, jak połączyć te dwa światy i wyświetlić dane z tabeli w przeglądarce.
Na szczęście – to wcale nie jest takie trudne! W tym artykule pokażę Ci krok po kroku, jak połączyć się z bazą danych MySQL, pobrać dane z tabeli i zaprezentować je w czytelnej formie w HTML.
Przy okazji podpowiem Ci też kilka praktycznych sztuczek, które pomogą Ci pisać czysty, bezpieczny i wydajny kod.
Gotowy? No to zaczynamy!
Czym jest MySQL i dlaczego warto go używać z PHP?
Zacznijmy od podstaw.
MySQL to popularny system zarządzania relacyjną bazą danych (RDBMS), który przechowuje dane w tabelach. Każda tabela ma kolumny (np. id, imie, email, data_utworzenia) i wiersze (czyli konkretne rekordy danych).
PHP natomiast to język skryptowy działający po stronie serwera, który świetnie współpracuje z MySQL. To właśnie dzięki tej parze — PHP + MySQL — powstały takie systemy jak WordPress, Joomla, Drupal czy tysiące innych aplikacji webowych.
Co będzie Ci potrzebne?
Zanim przejdziemy do kodu, upewnij się, że masz wszystko, czego potrzebujesz:
- Serwer lokalny, np. XAMPP lub Laragon, który zawiera Apache, PHP i MySQL.
- Edytor kodu, np. VS Code, Sublime Text, Notepad++ lub PHPStorm.
- Trochę cierpliwości i chęci do nauki 😉
Tworzymy bazę danych i tabelę
Zaloguj się do phpMyAdmin (zazwyczaj pod adresem http://localhost/phpmyadmin) i wykonaj następujące kroki:
- Kliknij „Nowa” i utwórz bazę danych o nazwie np.
sklep. - W nowej bazie utwórz tabelę o nazwie
produktyz polami:id(INT, AI, PRIMARY KEY)nazwa(VARCHAR 100)cena(DECIMAL 10,2)opis(TEXT)
Możesz też użyć tego zapytania SQL:
CREATE DATABASE sklep; USE sklep; CREATE TABLE produkty ( id INT(11) AUTO_INCREMENT PRIMARY KEY, nazwa VARCHAR(100) NOT NULL, cena DECIMAL(10,2) NOT NULL, opis TEXT );
Teraz dodajmy kilka przykładowych danych:
INSERT INTO produkty (nazwa, cena, opis) VALUES
('Laptop Lenovo', 2999.99, 'Nowoczesny laptop z procesorem Intel i5.'),
('Smartfon Samsung', 1999.00, 'Flagowy model z doskonałym aparatem.'),
('Mysz Logitech', 129.99, 'Bezprzewodowa mysz optyczna.'),
('Monitor Dell', 899.50, 'Monitor Full HD o przekątnej 24 cale.');
Świetnie! Dane mamy. Czas przejść do PHP.
Łączenie PHP z MySQL
Do komunikacji z bazą danych w PHP najczęściej używa się rozszerzenia MySQLi lub PDO (PHP Data Objects).
Dla prostoty w tym przykładzie użyjemy MySQLi, ale wspomnę też później o PDO.
Utwórz plik o nazwie polaczenie.php:
<?php
$host = "localhost";
$user = "root"; // domyślny użytkownik XAMPP-a
$pass = ""; // puste hasło (chyba że ustawiłeś własne)
$db = "sklep";
// Tworzymy połączenie
$conn = new mysqli($host, $user, $pass, $db);
// Sprawdzamy, czy połączenie działa
if ($conn->connect_error) {
die("Błąd połączenia z bazą danych: " . $conn->connect_error);
}
// Jeśli wszystko OK
echo "Połączono z bazą danych!";
?>
Zapisz i uruchom w przeglądarce pod adresem:http://localhost/polaczenie.php
Jeśli widzisz komunikat „Połączono z bazą danych!”, to znaczy, że wszystko działa jak należy.
Pobieranie i wyświetlanie danych z tabeli
Teraz najważniejsza część — wyświetlenie zawartości tabeli produkty.
Utwórz nowy plik o nazwie wyswietl.php i dodaj poniższy kod:
<?php
include 'polaczenie.php'; // dołączamy plik z połączeniem
$sql = "SELECT * FROM produkty";
$wynik = $conn->query($sql);
if ($wynik->num_rows > 0) {
echo "<h2>Lista produktów:</h2>";
echo "<table border='1' cellpadding='10'>";
echo "<tr><th>ID</th><th>Nazwa</th><th>Cena</th><th>Opis</th></tr>";
while ($wiersz = $wynik->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $wiersz['id'] . "</td>";
echo "<td>" . $wiersz['nazwa'] . "</td>";
echo "<td>" . number_format($wiersz['cena'], 2, ',', ' ') . " zł</td>";
echo "<td>" . $wiersz['opis'] . "</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "Brak danych w tabeli.";
}
$conn->close();
?>
Otwórz w przeglądarce http://localhost/wyswietl.php
i zobaczysz piękną tabelę z danymi.
Stylizacja tabeli w HTML i CSS
Wyświetlanie danych w surowej tabeli HTML działa, ale… wygląda trochę smutno.
Dodajmy więc odrobinę stylu.
Utwórz plik style.css:
body {
font-family: Arial, sans-serif;
background-color: #f4f6f8;
color: #333;
margin: 40px;
}
h2 {
text-align: center;
color: #0066cc;
}
table {
margin: auto;
border-collapse: collapse;
width: 80%;
background-color: white;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
th, td {
border: 1px solid #ccc;
padding: 12px;
text-align: left;
}
th {
background-color: #007bff;
color: white;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
tr:hover {
background-color: #e8f0fe;
}
I w pliku wyswietl.php na samej górze (zaraz po otwarciu PHP) dodaj linię:
<link rel="stylesheet" href="style.css">
Teraz Twoja tabela wygląda o niebo lepiej.
Jak to zrobić bezpieczniej – PDO
Jeśli zależy Ci na bezpieczeństwie i chcesz tworzyć nowoczesne aplikacje, lepiej używać PDO zamiast MySQLi.
PDO obsługuje więcej typów baz danych (nie tylko MySQL) i ma wsparcie dla tzw. zapytań przygotowanych (prepared statements), które chronią przed SQL Injection.
Oto ten sam przykład z użyciem PDO:
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=sklep;charset=utf8", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM produkty";
$stmt = $pdo->query($sql);
echo "<h2>Lista produktów:</h2>";
echo "<table border='1' cellpadding='10'>";
echo "<tr><th>ID</th><th>Nazwa</th><th>Cena</th><th>Opis</th></tr>";
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['nazwa']}</td>";
echo "<td>" . number_format($row['cena'], 2, ',', ' ') . " zł</td>";
echo "<td>{$row['opis']}</td>";
echo "</tr>";
}
echo "</table>";
} catch (PDOException $e) {
echo "Błąd połączenia: " . $e->getMessage();
}
?>
To rozwiązanie jest nieco bardziej eleganckie i odporne na błędy.
Dodatkowe funkcje – sortowanie i filtrowanie
Chcesz, żeby użytkownicy mogli sortować dane albo wyszukiwać produkt po nazwie?
Nic prostszego!
Dodajmy prosty formularz wyszukiwania do pliku wyswietl.php:
<form method="GET" action="">
<input type="text" name="szukaj" placeholder="Szukaj produktu...">
<input type="submit" value="Szukaj">
</form>
<br>
I zmień zapytanie SQL:
$szukaj = "";
if (isset($_GET['szukaj'])) {
$szukaj = $_GET['szukaj'];
$sql = "SELECT * FROM produkty WHERE nazwa LIKE '%$szukaj%'";
} else {
$sql = "SELECT * FROM produkty";
}
Teraz możesz wpisać np. „Laptop” i zobaczyć tylko pasujące wyniki.
Wskazówka: w realnym projekcie do filtrowania danych używaj zapytań przygotowanych (prepare + bindParam), by uniknąć ataków SQL Injection.
Typowe błędy i jak ich uniknąć
Podczas pracy z PHP i MySQL bardzo łatwo o drobne pomyłki.
Oto kilka typowych błędów i jak sobie z nimi poradzić:
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| „Access denied for user 'root’@’localhost’” | Złe dane logowania do bazy | Sprawdź login i hasło w polaczenie.php |
| „Unknown database 'sklep’” | Baza nie istnieje | Utwórz bazę w phpMyAdmin |
| Pusta tabela w przeglądarce | Brak danych w tabeli lub błędne zapytanie | Wypisz $conn->error po zapytaniu |
| Polski tekst wyświetla się dziwnie (np. ą, ę, ś) | Zły zestaw znaków | Dodaj charset=utf8 w połączeniu z bazą |
Jak widzisz, wyświetlanie zawartości tabeli MySQL w PHP to naprawdę prosty proces, jeśli tylko wiesz, od czego zacząć.
W skrócie:
- Tworzysz bazę danych i tabelę w MySQL.
- Łączysz się z bazą przez PHP (MySQLi lub PDO).
- Pobierasz dane za pomocą
SELECT * FROM tabela. - Wyświetlasz wyniki w HTML.
- (Opcjonalnie) Stylizujesz tabelę CSS-em i dodajesz funkcje wyszukiwania.
Dzięki temu możesz tworzyć dynamiczne strony internetowe, panele administracyjne, systemy sklepowe i wiele innych projektów.