Використання PHP MySQL розширень (mysqlnd, mysqli, PDO) у ServBay
ServBay — це потужне інтегроване локальне середовище для веб-розробки, яке суттєво спрощує взаємодію PHP-додатків із базами даних. Усі основні розширення для роботи з MySQL у PHP (mysqlnd
, mysqli
, PDO_MySQL
) попередньо встановлено та увімкнено за замовчуванням для всіх підтримуваних версій PHP. Це означає, що ви можете відразу підключатися до MySQL або MariaDB у своїх PHP-проектах — жодних додаткових налаштувань не потрібно.
Наявні PHP MySQL розширення у ServBay
У кожному PHP-оточенні, керованому ServBay, вже вбудовано три основні розширення для MySQL, що забезпечують високу сумісність і продуктивність:
- MySQL Native Driver (
mysqlnd
): Це нативний драйвер для PHP, який виступає базовою бібліотекою дляmysqli
іPDO_MySQL
, забезпечує ядро для обміну з MySQL/MariaDB і часто відрізняється кращою продуктивністю та ефективнішим управлінням пам’яттю. - MySQLi (
mysqli
): Розширення MySQL Improved пропонує і об'єктно-орієнтований, і процедурний інтерфейс, спеціально призначений для взаємодії з MySQL/MariaDB. Підтримує підготовлені запити, транзакції, процедури й багатозапитність. - PDO MySQL (
PDO_MySQL
): Драйвер MySQL для PHP Data Objects (PDO). PDO забезпечує єдиний абстрактний рівень для роботи з різними базами даних (наприклад, MySQL, MariaDB, PostgreSQL, SQLite), підвищуючи переносимість коду.
Стан розширень
У ServBay розширення mysqlnd
, mysqli
та PDO_MySQL
активовані за замовчуванням у всіх версіях PHP. Вам не потрібно нічого додатково налаштовувати — ServBay самостійно керує параметрами php.ini
, тому ви одразу можете підключатися до бази даних у коді.
Детальний огляд PHP MySQL розширень
Розуміння різниці між цими трьома розширеннями допоможе вибрати оптимальний варіант для вашого проєкту:
MySQL Native Driver (
mysqlnd
)- Основна роль:
mysqlnd
— це написаний на C нативний драйвер, що надає базовий рівень взаємодії між PHP і MySQL/MariaDB. - Головні особливості: Починаючи з PHP 5.3,
mysqlnd
є типовою основою дляmysqli
таPDO_MySQL
. Він вбудований у PHP і не вимагає зовнішньої клієнтської бібліотеки (наприклад,libmysqlclient
). - Ключові переваги: Порівняно з застарілим
libmysqlclient
,mysqlnd
зазвичай забезпечує кращу продуктивність, ефективніше використання пам’яті, підтримку асинхронних запитів, вдосконалені постійні з’єднання і розширений API для плагінів. Безпосередньо зmysqlnd
ви, як правило, не працюєте — всі переваги доступні черезmysqli
абоPDO
.
- Основна роль:
MySQLi (
mysqli
)- Основна роль: Розширення MySQL Improved спеціально розроблено для MySQL 4.1.3+ і MariaDB.
- Головні особливості: Два інтерфейси — об'єктний та процедурний. Підтримка підготовлених виразів (захищає від SQL-ін’єкцій), управління транзакціями, процедурні виклики, багатоопераційність.
- Ключові переваги: Багатофункціональність, заточення під MySQL/MariaDB, гарна продуктивність. Якщо ви точно знаєте, що проєкт використовуватиме лише MySQL або MariaDB і треба мати доступ до їхніх специфічних можливостей, варто вибрати саме mysqli.
PDO MySQL (
PDO_MySQL
)- Основна роль: PHP Data Objects (PDO) забезпечують легковагий і уніфікований інтерфейс для роботи з різними СУБД;
PDO_MySQL
— саме для MySQL/MariaDB. - Головні особливості: Універсальний API (
PDO
,PDOStatement
), завжди використовує підготовлені запити (prepare()
іexecute()
), що є найкращою практикою безпеки. Підтримка транзакцій. - Ключові переваги: Переносимість — головна перевага PDO. Якщо колись знадобиться мігрувати на PostgreSQL, SQLite чи іншу підтримувану базу, зміни у коді мінімальні. Чистий об'єктний інтерфейс робить код лаконічним і безпечним. Для нових проєктів слід надавати перевагу саме PDO.
- Основна роль: PHP Data Objects (PDO) забезпечують легковагий і уніфікований інтерфейс для роботи з різними СУБД;
Приклад PHP-коду: підключення та робота з базою даних
Нижче наведено приклади, як за допомогою розширень mysqli
та PDO
підключатися до бази даних, керованої ServBay (наприклад, MariaDB або MySQL), та виконувати базові операції:
Вимоги:
- Запущено сервіс MySQL або MariaDB у ServBay.
- Створено базу даних із назвою
servbay_db
. - Створено користувача
servbay_user
, якому надано парольyour_password
і належні права до базиservbay_db
. - У базі
servbay_db
є таблицяusers
з полями:id
(INT, PK, AI),name
(VARCHAR),email
(VARCHAR),age
(INT).
Виконати ці налаштування можна через вбудований phpMyAdmin від ServBay чи будь-який інший інструмент для адміністрування баз даних.
Приклад коду (метод mysqli
)
php
<?php
// --- mysqli приклад ---
// Параметри підключення до бази даних
$servername = "127.0.0.1"; // або 'localhost'
$port = 3306; // Стандартний порт MySQL/MariaDB у ServBay
$username = "servbay_user";
$password = "your_password"; // Замість цього рядка введіть свій пароль
$dbname = "servbay_db";
// Створення з'єднання mysqli (об'єктний спосіб)
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// Перевірка успішності підключення
if ($conn->connect_error) {
die("mysqli Connection failed: " . $conn->connect_error);
}
echo "mysqli Connected successfully<br>";
// Вставка даних (з використанням підготовлених виразів для захисту від SQL-ін'єкцій)
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$name = "ServBay Demo";
$email = "[email protected]";
$age = 5;
// "ssi" означає 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();
// Запит даних
$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>";
// Виведення даних
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>";
}
// Закриття підключення
$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
Приклад коду (метод PDO
)
php
<?php
// --- PDO приклад ---
// Параметри підключення до бази даних
$host = '127.0.0.1'; // або 'localhost'
$port = 3306; // Стандартний порт MySQL/MariaDB у ServBay
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Замість цього рядка введіть свій пароль
$charset = 'utf8mb4';
// Data Source Name (DSN)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// Налаштування PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Кидати виключення, а не попередження
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // За замовчуванням повертати асоціативний масив
PDO::ATTR_EMULATE_PREPARES => false, // Використовувати нативні підготовлені вирази
];
try {
// Створення екземпляру PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO Connected successfully<br>";
// Вставка даних (з використанням підготовлених виразів)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Demo';
$email = '[email protected]';
$age = 10;
// Прив’язка параметрів і виконання
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO: New record created successfully<br>";
// Запит даних
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Demo']);
// Отримання результатів
$users = $stmt->fetchAll(); // За замовчуванням FETCH_ASSOC
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) {
// Перехоплення й вивід помилок підключення чи запиту
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// Зазвичай необхідності явно закривати PDO-об'єкт немає — його буде закрито автоматично при завершенні скрипту
// $pdo = null; // Можна явно присвоїти null для закриття
?>
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
Розміщення коду: Збережіть будь-який із наведених прикладів у файл із розширенням .php
(наприклад, db_test_mysqli.php
чи db_test_pdo.php
) і розмістіть його у кореневій папці вашого сайту ServBay (наприклад, /Applications/ServBay/www/myproject/
). Після цього відкрийте відповідний URL у браузері (наприклад, http://myproject.servbay.demo/db_test_mysqli.php
). Переконайтеся, що ваш сайт належно налаштований і запущений у ServBay.
Поширені питання (FAQ)
Q: Чи потрібно мені вручну встановлювати MySQL-розширення для PHP у ServBay?
A: Ні. ServBay вже має попередньо встановлені і ввімкнені розширення mysqlnd
, mysqli
та PDO_MySQL
для всіх керованих версій PHP. Ви одразу можете використовувати їх у своєму PHP-коді без жодної додаткової установки чи налаштування.
Q: Що краще обрати — mysqli
чи PDO
?
A:
- Рекомендуємо
PDO
: Якщо у вашому застосунку потрібна підтримка кількох типів СУБД (не лише MySQL/MariaDB) або ви прагнете до сучасного, об’єктно-орієнтованого та переносимого коду, вибір очевидний — PDO. Він обов’язково використовує підготовлені запити, що підвищує безпеку коду. - Обирайте
mysqli
, якщо: Проєкт гарантовано використовує лише MySQL чи MariaDB і вас цікавлять їхні специфічні можливості.mysqli
— високопродуктивне й функціонально багате рішення, з об’єктним і процедурним інтерфейсами.
Для нових проєктів оптимальним є PDO.
Q: Як визначити параметри для підключення до MySQL/MariaDB у ServBay?
A:
- Host (Хост): Зазвичай —
127.0.0.1
абоlocalhost
. - Port (Порт): Типово для MySQL/MariaDB у ServBay —
3306
. Перевірити актуальний порт можна у менеджері пакетів ServBay. - Username / Password (Логін / Пароль): Дані користувача бази даних, створеного у MySQL/MariaDB. Якщо ви ще не створювали користувача — зробіть це або скористайтеся root (не рекомендується у продакшн). Керувати користувачами та правами зручно через phpMyAdmin, вбудований у ServBay.
- Database Name (База даних): Назва потрібної для підключення бази даних.
Q4: Чи підтримує ServBay старі функції mysql_*
для застарілих проєктів?
A: Так, для зручності підтримки/міграції старих застосунків ServBay у середовищі PHP 5.6 включає підтримку застарілих функцій mysql_*
(наприклад, mysql_connect
). Вони були позначені як застарілі з PHP 5.5 і повністю видалені у PHP 7.0. У PHP 5.6 від ServBay ви зможете запускати код із такими функціями без потреби шукати ще старіші версії PHP.
Важливо!
- Використовуйте цю можливість лише для тимчасової сумісності чи супроводу спадщинного коду.
- Для нових проєктів або при рефакторингу старих обов’язково переходьте на сучасні безпечні розширення —
mysqli
чиPDO
. Старі функції мають серйозні вразливості (наприклад, до SQL-ін’єкцій) і не підтримують актуальні можливості баз даних.
Висновок
ServBay значно полегшує роботу PHP-розробників із базами даних, попередньо встановлюючи та вмикаючи розширення mysqlnd
, mysqli
і PDO_MySQL
для всіх версій PHP, а також забезпечуючи сумісність із застарілими функціями mysql_*
у PHP 5.6. Це означає, що вам не доведеться мати справу з рутинною установкою або складним налаштуванням: просто обирайте найбільш прийнятне розширення (оптимально — PDO або mysqli) для вашого проєкту та підключайтеся до MySQL/MariaDB у середовищі ServBay.
Такий підхід «з коробки» дозволяє зосередитися на логіці додатку, використовуючи стабільне, ефективне локальне середовище ServBay для швидкої розробки, тестування й підтримки сучасних веб-сервісів.