PHP предоставляет три различных API для доступа к MySQL. Ниже показаны API, предоставляемые расширениями mysql, 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']);
// mysql
$c = mysql_connect("example.com", "user", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Привет, дорогой пользователь MySQL!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
?>
Рекомендованные API
Рекомендуется использовать mysqli или PDO_MySQL. Не рекомендуется использовать старое расширение mysql ,так как оно объявлено устаревшим в PHP 5.5.0 и окончательно убрано в PHP 7. Детальная матрица сравнения представлена ниже. Общая производительность всех трех расширений примерно одинакова. Производительность расширения привносит крайне малую лепту в общую длительность выполнения веб-запроса, обычно не более 0.1%.
Сравнение возможностей
| ext/mysqli | PDO_MySQL | ext/mysql | |
|---|---|---|---|
| Появилось в версии PHP | 5.0 | 5.1 | 2.0 |
| Работает в PHP 5.x | Да | Да | Да |
| Работает в PHP 7.x | Да | Да | Нет |
| Статус разработки | Активный | Активный | Поддержка в 5.x; убрано в 7.x |
| Жизненный цикл | Активный | Активный | Устаревшее в 5.x; убрано в 7.x |
| Рекомендовано для новых проектов | Да | Да | Нет |
| ООП интерфейс | Да | Да | Нет |
| Процедурный интерфейс | Да | Нет | Да |
| API поддерживает асинхронные, неблокирующие запросы mysqlnd | Да | Нет | Нет |
| Постоянные(persistent) соединения | Да | Да | Да |
| API поддерживает кодировки(charset) | Да | Да | Да |
| API поддерживает подготовленные запросы на стороне сервера | Да | Да | Нет |
| API поддерживает подготовленные запросы на стороне клиента | Нет | Да | Нет |
| API подерживает хранимые процедуры | Да | Да | Нет |
| API поддерживает множественные запросы | Да | Большинство | нет |
| API поддерживает транзакции | Да | Да | нет |
| Можно контролировать транзакции посредством SQL | Да | Да | Да |
| Поддерживает всю функциональность MySQL 5.1+ | Да | Большинство | нет |