PHP предлагает разные API-интерфейсы для доступа к СУБД MySQL. Примеры в следующем абзаце показывают взаимодействие с API-интерфейсом модулей mysqli и PDO. Каждый фрагмент кода создаёт соединение с MySQL-сервером, который работает на домене example.com. Код передаёт значение "user" как имя пользователя, а значение "password" как пароль.
Пример #1 Сравнение API-интерфейсов для взаимодействия с СУБД MySQL
<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Привет, дорогой пользователь MySQL!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);
// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Привет, дорогой пользователь MySQL!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
?>
Пример #2 Сравнение подготовленных запросов
<?php
// Модуль mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$statement = $mysqli->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$result = $statement->get_result();
$row = $result->fetch_assoc();
echo htmlentities($row['District']);
// Модуль PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['District']);
?>
Сравнение функций модулей
Общая производительность обоих модулей примерно одинакова. Хотя производительность модуля составляет только часть общего времени выполнения веб-запроса PHP. Часто влияние составляет не более 0,1 %.
ext/mysqli | PDO_MySQL | |
---|---|---|
Версия PHP, в которой представили модуль | 5.0 | 5.1 |
Входит в состав PHP 7.x и 8.x | Да | Да |
Статус разработки | Активный | Активный |
Жизненный цикл | Активный | Активный |
Рекомендуется для новых проектов | Да | Да |
Предлагает ООП-интерфейс | Да | Да |
Предлагает процедурный интерфейс | Да | Нет |
API поддерживает асинхронные неблокирующие запросы через драйвер mysqlnd | Да | Нет |
Постоянные соединения | Да | Да |
API поддерживает кодировки | Да | Да |
API поддерживает подготовленные запросы на стороне сервера | Да | Да |
API поддерживает подготовленные запросы на стороне клиента | Нет | Да |
API поддерживает хранимые процедуры | Да | Да |
API поддерживает множественные запросы | Да | Большинство |
API поддерживает транзакции | Да | Да |
Транзакции контролируются через SQL | Да | Да |
Поддерживает функциональность MySQL 5.1+ | Да | Большинство |