Bezpieczne połączenie z bazą MySQL (PDO)
- Baza danych
- poziom: początkujący
- aktualizacja: 12 lipca 2026
PDO to zalecany sposób łączenia się z bazą danych w PHP — bezpieczniejszy i wygodniejszy niż stare funkcje mysql_* (usunięte z PHP) i bardziej uniwersalny niż mysqli. Ten skrypt to fundament, na którym opierają się wszystkie pozostałe skrypty bazodanowe na tej stronie.
Funkcja polacz_z_baza() tworzy połączenie tylko raz i zwraca je przy każdym kolejnym wywołaniu, więc możesz jej używać w wielu miejscach bez obaw o wielokrotne łączenie.
<?php
/**
* Bezpieczne połączenie z MySQL przez PDO — skryptyPHP.com
* Zapisz jako: baza.php i dołączaj przez require 'baza.php';
*/
/**
* Zwraca połączenie z bazą (tworzy je tylko przy pierwszym wywołaniu).
*/
function polacz_z_baza(): PDO
{
static $pdo = null;
if ($pdo === null) {
// ── DANE DOSTĘPOWE (znajdziesz je w panelu hostingu) ──
$host = 'localhost';
$baza = 'nazwa_bazy';
$uzytkownik = 'uzytkownik';
$haslo = 'haslo';
// utf8mb4 = pełne wsparcie polskich znaków i emoji
$dsn = "mysql:host=$host;dbname=$baza;charset=utf8mb4";
$opcje = [
// Błędy jako wyjątki — nic nie przejdzie „po cichu"
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// Wyniki jako tablice asocjacyjne: $wiersz['kolumna']
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
// Prawdziwe zapytania przygotowane (a nie ich emulacja)
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $uzytkownik, $haslo, $opcje);
} catch (PDOException $e) {
// Na produkcji NIE pokazuj $e->getMessage() —
// komunikat może zdradzić dane dostępowe!
error_log('Błąd połączenia z bazą: ' . $e->getMessage());
exit('Przepraszamy, wystąpił problem z bazą danych.');
}
}
return $pdo;
}
// ── PRZYKŁADY UŻYCIA ────────────────────────────────────────
$pdo = polacz_z_baza();
// 1. Zapytanie z parametrem — ZAWSZE przez prepare/execute
$stmt = $pdo->prepare('SELECT id, imie, email FROM uzytkownicy WHERE email = ?');
$stmt->execute(['jan.kowalski@przyklad.pl']);
$uzytkownik = $stmt->fetch(); // jeden wiersz albo false
// 2. Parametry nazwane — czytelniejsze przy wielu wartościach
$stmt = $pdo->prepare(
'INSERT INTO uzytkownicy (imie, email) VALUES (:imie, :email)'
);
$stmt->execute([
'imie' => 'Jan Kowalski',
'email' => 'jan.kowalski@przyklad.pl',
]);
$noweId = (int) $pdo->lastInsertId(); // ID wstawionego wiersza
// 3. Pobranie wielu wierszy
$stmt = $pdo->query('SELECT id, imie FROM uzytkownicy ORDER BY id DESC LIMIT 10');
foreach ($stmt as $wiersz) {
echo htmlspecialchars($wiersz['imie']) . '<br>';
}
Jak użyć tego skryptu
- Zapisz kod jako
baza.phpi uzupełnij dane dostępowe (host, nazwa bazy, użytkownik, hasło) z panelu swojego hostingu. - W każdym skrypcie korzystającym z bazy dołącz plik:
require 'baza.php';i pobierz połączenie:$pdo = polacz_z_baza();. - Zapytania z danymi od użytkownika wykonuj wyłącznie przez
prepare()+execute()— nigdy nie sklejaj SQL-a ze zmiennymi.
Warto wiedzieć
- Zapytania przygotowane to podstawowa ochrona przed SQL injection — dane i treść zapytania podróżują do bazy osobno, więc złośliwa wartość nie zmieni sensu zapytania.
- Kodowanie
utf8mb4(a nie starszeutf8) obsługuje wszystkie znaki Unicode, w tym emoji. Upewnij się, że tabele też mająutf8mb4_polish_cilubutf8mb4_unicode_ci. - Plik z hasłem do bazy trzymaj poza katalogiem publicznym serwera, jeśli hosting to umożliwia — a przynajmniej nigdy nie rób jego kopii typu
baza.php.bak, bo taką kopię każdy pobierze jak zwykły plik tekstowy.
Podobne skrypty
CRUD — dodawanie, edycja i usuwanie rekordów (PDO)
Kompletny przykład CRUD w jednym pliku: lista rekordów, dodawanie, edycja i usuwanie z zapytaniami przygotowanymi PDO oraz tokenem CSRF chroniącym operacje zmieniające dane.
średni Zobacz kod → Baza danychPaginacja (stronicowanie) wyników z bazy danych
Stronicowanie wyników zapytania SQL z linkami 1 … 4 5 6 … 20, poprawnym LIMIT/OFFSET na parametrach oraz zabezpieczeniem numeru strony.
średni Zobacz kod → Baza danychWyszukiwarka na stronie z podświetlaniem wyników
Prosta, bezpieczna wyszukiwarka rekordów w MySQL: LIKE z poprawnym maskowaniem znaków specjalnych, obsługa wielu słów naraz i podświetlanie znalezionej frazy.
średni Zobacz kod →