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 wmysqli
.
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 |