Использование PHP-расширений MySQL (mysqlnd, mysqli, PDO) в ServBay
ServBay — это мощная интегрированная локальная среда веб-разработки, которая значительно упрощает взаимодействие PHP-приложений с базой данных. Для всех поддерживаемых версий PHP здесь уже предустановлены и по умолчанию активированы ключевые расширения для работы с MySQL: mysqlnd
, mysqli
и PDO_MySQL
. Это позволяет вам сразу же использовать MySQL или MariaDB в своих проектах на PHP без необходимости ручной настройки.
Доступные PHP-расширения MySQL в ServBay
В среде PHP под управлением ServBay по умолчанию встроены три популярных расширения для работы с MySQL, что гарантирует совместимость и высокую производительность:
- MySQL Native Driver (
mysqlnd
): собственный драйвер PHP, лежащий в основе расширенийmysqli
иPDO_MySQL
. Он обеспечивает базовую коммуникацию с серверами MySQL/MariaDB, отличается хорошей производительностью и эффективным управлением памятью. - MySQLi (
mysqli
): улучшенное расширение для MySQL (MySQL Improved Extension), которое поддерживает объектно-ориентированный и процедурный интерфейсы. Специализировано для подключения к MySQL и MariaDB и поддерживает расширенные функции, такие как подготовленные выражения, транзакции, хранимые процедуры и мульти-запросы. - PDO MySQL (
PDO_MySQL
): драйвер MySQL для PHP Data Objects (PDO). Позволяет использовать универсальный абстрактный слой доступа к БД, что облегчает взаимодействие с множеством баз данных (MySQL, MariaDB, PostgreSQL, SQLite и т.д.) через единый API, делая код более переносимым.
Статус включения
В ServBay расширения mysqlnd
, mysqli
и PDO_MySQL
по умолчанию активированы во всех версиях PHP. Вам не нужно предпринимать никаких дополнительных шагов для их подключения — необходимая конфигурация php.ini
уже настроена, и вы можете использовать расширения для подключения к базам данных прямо в вашем коде.
Подробный обзор каждого расширения PHP MySQL
Понимание различий между этими тремя расширениями поможет выбрать оптимальный вариант под ваши задачи:
MySQL Native Driver (
mysqlnd
)- Назначение:
mysqlnd
— нативный драйвер PHP, написанный на C, обеспечивает фундаментальный слой работы между PHP и MySQL/MariaDB. - Ключевые особенности: С версии PHP 5.3 выступает стандартной низкоуровневой библиотекой для
mysqli
иPDO_MySQL
. Встроен непосредственно в PHP, не требует подключения внешних библиотек (например,libmysqlclient
). - Преимущества: По сравнению с устаревшими библиотеками вроде
libmysqlclient
,mysqlnd
обычно быстрее, эффективнее управляет памятью, поддерживает асинхронные запросы, усовершенствованные постоянные соединения и дополнительные API для плагинов. Как правило, вы не взаимодействуете напрямую с APImysqlnd
, используя его преимущества черезmysqli
илиPDO
.
- Назначение:
MySQLi (
mysqli
)- Назначение: Специализированное расширение PHP для работы с 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()
), что является лучшей практикой безопасности. Расширение поддерживает транзакции. - Преимущества: Максимальная переносимость кода между разными СУБД. Если есть вероятность, что проект будет использовать в будущем PostgreSQL, SQLite или другие базы — выбор PDO уменьшит объём доработок. Интерфейс простой, код становится лаконичнее и безопаснее. Для новых проектов часто рекомендуют именно 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).
Для выполнения этих настроек можно воспользоваться встроенным в ServBay phpMyAdmin или любым другим инструментом управления базами данных.
Пример кода (вариант mysqli
)
<?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();
?>
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
// --- Пример PDO ---
// Параметры подключения к БД
$host = '127.0.0.1'; // или 'localhost'
$port = 3306; // стандартный порт MySQL/MariaDB в ServBay
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Замените на ваш реальный пароль
$charset = 'utf8mb4';
// Строка подключения (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; // Можно явно закрыть соединение
?>
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/
). После этого вы сможете открыть файл в браузере по адресу, соответствующему вашему проекту, например http://myproject.servbay.demo/db_test_mysqli.php
. Убедитесь, что ваш сайт корректно настроен и запущен в ServBay.
Вопросы и ответы (FAQ)
Вопрос: Нужно ли вручную устанавливать расширения MySQL для PHP в ServBay?
Ответ: Нет, не нужно. ServBay уже содержит и автоматически активирует все важные расширения для работы с MySQL: mysqlnd
, mysqli
, PDO_MySQL
для всех поддерживаемых PHP-версий. Вы можете сразу использовать их в своем коде без каких-либо дополнительных действий.
Вопрос: Что выбрать — mysqli
или PDO
?
Ответ:
- Рекомендуем использовать
PDO
: если проект рассчитан на возможность работы с разными СУБД (не только MySQL/MariaDB) или вам важна максимальная переносимость, современный стиль и безопасность кода — выбирайте PDO. Это также способствует написанию защищённых от SQL-инъекций скриптов. - Используйте
mysqli
, если вы точно знаете, что проект всегда будет работать только с MySQL или MariaDB, и вам критичны специфические продвинутые возможности этих СУБД.mysqli
быстро работает, обладает богатым функционалом, поддерживает оба интерфейса.
Для новых проектов чаще всего советуют выбрать PDO.
Вопрос: Какие параметры указать для подключения к MySQL/MariaDB в ServBay?
Ответ:
- Host: обычно это
127.0.0.1
либоlocalhost
. - Port: стандартный порт для MySQL/MariaDB в ServBay —
3306
. Точный порт можно посмотреть в менеджере пакетов ServBay. - Username/Password: используйте логин и пароль пользователя вашей базы данных. Если пользователь ещё не создан, выполните это через встроенный phpMyAdmin или другой инструмент. Не используйте root-пользователя в боевом проекте!
- Database Name: имя нужной базы данных.
Вопрос 4: Можно ли использовать устаревшие функции mysql_*
из старых проектов?
Ответ: Да, для совместимости и облегчения поддержки или миграции старых приложений, ServBay включает поддержку устаревших функций mysql_*
(таких как mysql_connect
) в среде PHP 5.6. (Эти функции помечены как устаревшие в PHP 5.5 и полностью удалены в PHP 7.0.) Воспользуйтесь PHP 5.6 от ServBay для запуска такого кода — больше не нужно искать устаревшие дистрибутивы PHP.
Однако настоятельно рекомендуется:
- Использовать такую возможность только временно и только для сопровождения устаревших проектов.
- Для новых проектов или рефакторинга кода обязательно переходите на современные, безопасные расширения
mysqli
илиPDO
. Старые функцииmysql_*
— уязвимы к SQL-инъекциям и не поддерживают современные возможности БД.
Заключение
ServBay существенно облегчает работу с базами данных для PHP-разработчиков: все необходимые расширения (mysqlnd
, mysqli
, PDO_MySQL
) предустановлены и активированы для всех версий PHP, а также обеспечивается совместимость со старыми функциями mysql_*
(через PHP 5.6). Вам не нужно разбираться с ручной установкой или настройкой расширений — просто выбирайте оптимальный вариант (рекомендуется PDO или mysqli) и подключайтесь к MySQL или MariaDB под управлением ServBay!
Такой подход "из коробки" позволяет сфокусироваться на логике приложения: благодаря надежной и быстрой локальной среде вы сможете эффективно создавать, тестировать и развивать свои веб-проекты в macOS с помощью ServBay.