Kursy i Poradniki IT - Adrian Kowalski
Kurs Programowania PHP dla Początkujących
O lekcji

PHP oferuje kilka metod łączenia się z bazą danych MySQL. Każda metoda ma swoje zalety i wady, które warto rozumieć, aby wybrać odpowiednią w zależności od potrzeb projektu.

1. Stare mechanizmy (rozszerzenie mysql_)

W starszych wersjach PHP (do PHP 5.6 włącznie) można było używać funkcji mysql_, takich jak mysql_connect czy mysql_query. Te funkcje są jednak przestarzałe i zostały usunięte w PHP 7.

Przykład (NIE ZALECANY):

<?php
$link = mysql_connect('localhost', 'root', 'password');
if (!$link) {
    die('Nie udało się połączyć: ' . mysql_error());
}
echo 'Połączenie udane!';
mysql_close($link);
?>

Wady:

  • Brak obsługi zapytań przygotowanych, co naraża aplikację na ataki typu SQL Injection.
  • Nie obsługuje nowoczesnych mechanizmów, takich jak transakcje.
  • Przestarzałe i nieobsługiwane od PHP 7.

2. mysqli (MySQL Improved Extension)

mysqli to ulepszone rozszerzenie MySQL dostępne od PHP 5.0. Oferuje więcej funkcji niż starsze mysql_, w tym wsparcie dla zapytań przygotowanych, obsługę transakcji i obiektowe API.

Tryb proceduralny

<?php
$conn = mysqli_connect("localhost", "root", "password", "mojabaza");

if (!$conn) {
    die("Połączenie nieudane: " . mysqli_connect_error());
}
echo "Połączenie udane!";
mysqli_close($conn);
?>

Tryb obiektowy

<?php
$conn = new mysqli("localhost", "root", "password", "mojabaza");

if ($conn->connect_error) {
    die("Połączenie nieudane: " . $conn->connect_error);
}
echo "Połączenie udane!";
$conn->close();
?>

Zalety mysqli:

  • Obsługa zapytań przygotowanych, co zwiększa bezpieczeństwo.
  • Obsługuje zarówno API proceduralne, jak i obiektowe.
  • Wsparcie dla transakcji.

Wady:

  • Działa tylko z MySQL, co ogranicza elastyczność w razie potrzeby zmiany systemu bazy danych.

3. PDO (PHP Data Objects)

PDO to uniwersalne API do obsługi baz danych, które działa z różnymi systemami zarządzania bazami danych (np. MySQL, PostgreSQL, SQLite). Jest bardziej nowoczesne i zalecane w nowych projektach.

Tworzenie połączenia z PDO

<?php
$dsn = 'mysql:host=localhost;dbname=mojabaza;charset=utf8mb4';
$username = 'root';
$password = '';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Połączenie udane!";
} catch (PDOException $e) {
    echo "Błąd połączenia: " . $e->getMessage();
}
?>

Wykorzystanie zapytań przygotowanych w PDO

<?php
$sql = "SELECT * FROM uzytkownicy WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => '[email protected]']);
$result = $stmt->fetchAll();

foreach ($result as $row) {
    echo "ID: " . $row['id'] . " - Imię: " . $row['imie'] . "<br>";
}
?>
 

Zalety PDO:

  • Obsługuje wiele baz danych (MySQL, PostgreSQL, SQLite, MSSQL i inne).
  • Wsparcie dla zapytań przygotowanych i bezpieczeństwo przed SQL Injection.
  • Obsługa transakcji.
  • Łatwiejsze przenoszenie kodu między różnymi bazami danych.

Wady PDO:

  • Nie obsługuje wszystkich zaawansowanych funkcji MySQL (np. MULTI_QUERY), które są dostępne w mysqli.

Porównanie mysqli i PDO

Cechy mysqli PDO
Obsługa wielu baz danych Tylko MySQL Tak, wiele (MySQL, PostgreSQL, SQLite itd.)
Zapytania przygotowane Tak Tak
Obsługa transakcji Tak Tak
Styl API Proceduralny i obiektowy Tylko obiektowy
Przenośność Niska Wysoka