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+ | Да | Большинство | нет |