Выбор API

PHP предлагает разные API для доступа к СУБД MySQL. Примеры в следующем абзаце показывают взаимодействие с API модулей mysqli и PDO. Каждый фрагмент кода создаёт соединение с MySQL-сервером, который работает на домене example.com. Код передаёт значение user как имя пользователя, а значение password как пароль.

Пример #1 Сравнение MySQL API

<?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/mysqliPDO_MySQL
Версия PHP, в которой появился модуль5.05.1
Входит в состав PHP 7.x и 8.xДаДа
Статус разработкиАктивныйАктивный
Жизненный циклАктивныйАктивный
Рекомендуется для новых проектовДаДа
Предлагает ООП-интерфейсДаДа
Предлагает процедурный интерфейсДаНет
API поддерживает асинхронные неблокирующие запросы через драйвер mysqlndДаНет
Постоянные соединенияДаДа
API поддерживает кодировкиДаДа
API поддерживает подготовленные запросы на стороне сервераДаДа
API поддерживает подготовленные запросы на стороне клиентаНетДа
API поддерживает хранимые процедурыДаДа
API поддерживает множественные запросыДаБольшинство
API поддерживает транзакцииДаДа
Транзакции контролируются через SQLДаДа
Поддерживает функциональность MySQL 5.1+ДаБольшинство
To Top