Korzystanie z rozszerzeń PHP MySQL (mysqlnd, mysqli, PDO) w ServBay
ServBay jako potężne, zintegrowane lokalne środowisko programistyczne dla stron WWW znacząco upraszcza interakcje aplikacji PHP z bazą danych. Dla wszystkich obsługiwanych wersji PHP automatycznie instaluje i domyślnie aktywuje najważniejsze rozszerzenia MySQL: mysqlnd
, mysqli
i PDO_MySQL
. Oznacza to, że możesz natychmiast rozpocząć pracę z bazą MySQL lub MariaDB w swoim projekcie PHP – bez ręcznej konfiguracji.
Dostępne rozszerzenia PHP MySQL w ServBay
ServBay zapewnia w swoim środowisku trzy główne rozszerzenia MySQL, gwarantując kompatybilność i wysoką wydajność:
- MySQL Native Driver (
mysqlnd
): Natywny sterownik PHP, będący bazową warstwą dlamysqli
iPDO_MySQL
. Umożliwia komunikację z serwerem MySQL/MariaDB, zazwyczaj zapewniając lepszą wydajność i zarządzanie pamięcią. - MySQLi (
mysqli
): "MySQL Improved Extension" – udostępnia zarówno obiektowe, jak i proceduralne API. Zaprojektowany specjalnie do współpracy z MySQL/MariaDB: oferuje wsparcie dla przygotowanych zapytań, transakcji, procedur składowanych, zapytań wieloliniowych i innych zaawansowanych funkcji. - PDO MySQL (
PDO_MySQL
): Sterownik MySQL dla warstwy PDO (PHP Data Objects). Pozwala na jednolite podejście do obsługi różnych baz danych (MySQL, MariaDB, PostgreSQL, SQLite itd.), znacząco zwiększając przenośność kodu.
Status aktywacji
W ServBay rozszerzenia mysqlnd
, mysqli
i PDO_MySQL
są domyślnie aktywowane we wszystkich wersjach PHP. Nie musisz wykonywać żadnych dodatkowych czynności, aby je uruchomić. ServBay automatycznie skonfigurował odpowiednie ustawienia w pliku php.ini
, dzięki czemu możesz od razu korzystać z tych rozszerzeń i łączyć się z bazą danych w swoim kodzie.
Szczegółowe omówienie rozszerzeń PHP MySQL
Znajomość różnic między tymi trzema rozszerzeniami pomoże Ci wybrać najlepsze rozwiązanie do swojego projektu:
MySQL Native Driver (
mysqlnd
)- Główne zastosowanie:
mysqlnd
to natywny w C sterownik PHP, stanowiący podstawę komunikacji PHP z serwerami MySQL/MariaDB. - Cechy charakterystyczne: Od PHP 5.3 jest on domyślną warstwą dla
mysqli
iPDO_MySQL
. Jest bezpośrednio zintegrowany z PHP – nie wymaga zewnętrznych bibliotek klienta MySQL (jaklibmysqlclient
). - Najważniejsze zalety: W porównaniu do starszej biblioteki
libmysqlclient
oferuje większą wydajność, lepsze zarządzanie pamięcią oraz wsparcie zaawansowanych funkcji, m.in. zapytań asynchronicznych, ulepszone połączenia trwałe i bogate API pluginów. Zazwyczaj nie korzystasz z APImysqlnd
bezpośrednio, lecz korzystasz z jego funkcji poprzezmysqli
alboPDO
.
- Główne zastosowanie:
MySQLi (
mysqli
)- Główne zastosowanie: "MySQL Improved Extension" to rozszerzenie PHP przeznaczone do współpracy z MySQL (4.1.3+) i MariaDB.
- Cechy charakterystyczne: Oferuje zarówno API obiektowe, jak i proceduralne. Obsługuje przygotowane zapytania (skuteczna ochrona przed SQL Injection), transakcje, procedury składowane, zapytania wielowierszowe oraz inne funkcje zaawansowane MySQL/MariaDB.
- Najważniejsze zalety: Bogata funkcjonalność i optymalizacja pod MySQL/MariaDB, zapewniająca wysoką wydajność. Jeśli Twój projekt korzysta wyłącznie z MySQL/MariaDB i planujesz wykorzystywać zaawansowane funkcje tych baz,
mysqli
to solidny i niezawodny wybór.
PDO MySQL (
PDO_MySQL
)- Główne zastosowanie: PDO (PHP Data Objects) to lekka, spójna warstwa dostępu do baz danych.
PDO_MySQL
to dedykowany sterownik PDO dla MySQL/MariaDB. - Cechy charakterystyczne: Ujednolicony API dla obsługi bazy (
PDO
,PDOStatement
). Wymusza korzystanie z przygotowanych zapytań (metodyprepare()
iexecute()
), co jest najlepszą praktyką zabezpieczeń. Obsługuje transakcje. - Najważniejsze zalety: Przenośność kodu jest największym atutem PDO. Jeśli podejrzewasz, że w przyszłości Twój projekt może wymagać innej bazy (np. PostgreSQL, SQLite), wykorzystanie PDO zminimalizuje konieczność przerabiania kodu. Interfejs jest jasny, obiektowy, a kod staje się bezpieczniejszy i bardziej przejrzysty. W przypadku nowych projektów zazwyczaj zaleca się wybór PDO.
- Główne zastosowanie: PDO (PHP Data Objects) to lekka, spójna warstwa dostępu do baz danych.
Przykłady kodu PHP: połączenie z bazą danych i operacje
Poniżej znajduje się przykład, jak przy pomocy rozszerzeń mysqli
i PDO
połączyć się z bazą danych zarządzaną przez ServBay (przykład dla MariaDB lub MySQL) i wykonać podstawowe operacje.
Założenia:
- Usługi MySQL lub MariaDB są uruchomione w ServBay.
- Istnieje baza danych o nazwie
servbay_db
. - Utworzono użytkownika
servbay_user
o haśleyour_password
, posiadającego odpowiednie uprawnienia do bazyservbay_db
. - W bazie danych
servbay_db
znajduje się tabelausers
z kolumnami:id
(INT, PK, AI),name
(VARCHAR),email
(VARCHAR),age
(INT).
Te ustawienia możesz skonfigurować np. przez phpMyAdmin wbudowany w ServBay lub innym narzędziem do zarządzania bazami.
Przykład kodu (mysqli
)
php
<?php
// --- Przykład mysqli ---
// Parametry połączenia z bazą
$servername = "127.0.0.1"; // lub 'localhost'
$port = 3306; // Domyślny port MySQL/MariaDB w ServBay
$username = "servbay_user";
$password = "your_password"; // Zmień na swoje prawdziwe hasło
$dbname = "servbay_db";
// Tworzenie połączenia mysqli (tryb obiektowy)
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// Sprawdzenie poprawności połączenia
if ($conn->connect_error) {
die("mysqli Connection failed: " . $conn->connect_error);
}
echo "mysqli Connected successfully<br>";
// Wstawianie danych (przygotowane zapytanie, ochrona przed SQL Injection)
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$name = "ServBay Demo";
$email = "[email protected]";
$age = 5;
// "ssi" oznacza: string, string, integer
$stmt->bind_param("ssi", $name, $email, $age);
if ($stmt->execute()) {
echo "mysqli: New record created successfully<br>";
} else {
echo "mysqli Error: " . $stmt->error . "<br>";
}
$stmt->close();
// Pobieranie danych
$sql = "SELECT id, name, email, age FROM users WHERE name = 'ServBay Demo'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "mysqli Queried data:<br>";
// Wyświetlanie danych
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "mysqli: 0 results found<br>";
}
// Zamknięcie połączenia
$conn->close();
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Przykład kodu (PDO
)
php
<?php
// --- Przykład PDO ---
// Parametry połączenia z bazą
$host = '127.0.0.1'; // lub 'localhost'
$port = 3306; // Domyślny port MySQL/MariaDB w ServBay
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Zmień na swoje prawdziwe hasło
$charset = 'utf8mb4';
// DSN (Data Source Name)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// Opcje PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Rzucanie wyjątków zamiast ostrzeżeń
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Domyślne pobieranie jako tablica asocjacyjna
PDO::ATTR_EMULATE_PREPARES => false, // Używanie natywnych przygotowanych zapytań
];
try {
// Tworzenie instancji PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO Connected successfully<br>";
// Wstawianie danych (przygotowane zapytanie)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Demo';
$email = '[email protected]';
$age = 10;
// Powiązanie parametrów i wykonanie zapytania
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO: New record created successfully<br>";
// Pobieranie danych
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Demo']);
// Pobranie wszystkich wyników (domyślnie FETCH_ASSOC)
$users = $stmt->fetchAll();
if ($users) {
echo "PDO Queried data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Age: " . $row['age'] . "<br>";
}
} else {
echo "PDO: 0 results found<br>";
}
} catch (\PDOException $e) {
// Obsługa i wyświetlenie błędów połączenia lub zapytania
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// Połączenie PDO zwykle zamyka się automatycznie po zakończeniu skryptu – nie trzeba jawnie wywoływać close()
// $pdo = null; // Można ustawić na null, aby zamknąć połączenie explicite
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Umieszczenie kodu: Jeden z powyższych fragmentów zapisz jako plik .php
(np. db_test_mysqli.php
albo db_test_pdo.php
) i umieść w katalogu głównym swojej witryny w ServBay (np. /Applications/ServBay/www/myproject/
). Następnie odwiedź odpowiedni adres URL w przeglądarce (np. http://myproject.servbay.demo/db_test_mysqli.php
). Upewnij się, że strona jest poprawnie skonfigurowana i działa w ServBay.
Najczęstsze pytania i odpowiedzi (FAQ)
Q: Czy muszę samodzielnie instalować rozszerzenia MySQL dla PHP w ServBay?
A: Nie. ServBay automatycznie instaluje i aktywuje mysqlnd
, mysqli
oraz PDO_MySQL
w każdej wersji PHP przez siebie zarządzanej. Możesz korzystać z nich od razu w swoim kodzie PHP, bez dodatkowej instalacji czy konfiguracji.
Q: Co wybrać: mysqli
czy PDO
?
A:
- Polecamy PDO: Jeżeli Twój projekt może kiedyś wymagać obsługi innej bazy poza MySQL/MariaDB, albo zależy Ci na nowoczesności, przenośności i pełnym paradygmacie obiektowym – wybierz PDO. Zapewnia też większe bezpieczeństwo poprzez wymóg przygotowanych zapytań.
- Rozważ mysqli: Jeśli projekt na pewno wykorzystuje wyłącznie MySQL lub MariaDB i chcesz móc używać niektórych specyficznych dla tych baz zaawansowanych funkcji – mysqli pozostaje wydajnym i niezawodnym wyborem. Udostępnia również API proceduralne i obiektowe.
W przypadku nowych projektów zazwyczaj rekomendujemy PDO.
Q: Skąd wziąć dane logowania do MySQL/MariaDB zarządzanego przez ServBay?
A:
- Host: Zazwyczaj
127.0.0.1
albolocalhost
. - Port: Standardowo w ServBay to
3306
. Dokładny port sprawdzisz w panelu zarządzania pakietami ServBay. - Nazwa użytkownika / Hasło: Użyj poświadczeń użytkownika stworzonego w MySQL/MariaDB. Jeśli to pierwsze użycie, stwórz użytkownika lub (tymczasowo) użyj
root
(niezalecane dla aplikacji produkcyjnych). Użytkowników i uprawnienia możesz wygodnie zarządzać przez wbudowany phpMyAdmin lub inne narzędzia. - Nazwa bazy: Nazwa bazy danych, do której chcesz się połączyć.
Q4: Mam stary projekt korzystający z przestarzałych funkcji mysql_*
. Czy ServBay je obsługuje?
A: Tak. Dla ułatwienia migracji i utrzymania starszych aplikacji ServBay w wersji PHP 5.6 zapewnia obsługę starych funkcji mysql_*
(np. mysql_connect
). Te funkcje były oznaczone jako przestarzałe już w PHP 5.5 i zostały całkowicie usunięte w PHP 7.0. Dzięki środowisku PHP 5.6 w ServBay możesz dalej uruchamiać starszy kod bez konieczności szukania bardzo starych wersji PHP.
Pamiętaj jednak:
- Używaj tej funkcji tylko w trybie czasowej kompatybilności lub przy utrzymaniu starych projektów.
- W nowych projektach oraz podczas przebudowy kodu zdecydowanie migracja na mysqli lub PDO – są bezpieczniejsze i mają wsparcie nowoczesnych funkcjonalności. Funkcje
mysql_*
są podatne na ataki (np. SQL Injection) i nie wspierają zaawansowanych opcji nowych silników baz.
Podsumowanie
ServBay, automatycznie instalując i aktywując rozszerzenia mysqlnd
, mysqli
oraz PDO_MySQL
dla wszystkich wersji PHP, jak również zapewniając kompatybilność funkcji mysql_*
w PHP 5.6, znacząco upraszcza pracę programistów PHP z bazami danych. Nie musisz się martwić ręczną instalacją i konfiguracją – wystarczy, że wybierzesz w swoim kodzie najdogodniejsze rozszerzenie (zalecamy PDO lub mysqli), a połączenie z MySQL lub MariaDB w środowisku ServBay jest gotowe od ręki.
Dzięki tej gotowości od pierwszego uruchomienia możesz w pełni skoncentrować się na pisaniu logiki swojej aplikacji, korzystając z wydajnego, stabilnego środowiska lokalnego ServBay, które umożliwia szybkie tworzenie, testowanie i utrzymanie usług WWW.