Выбор API

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