PHP 8.5: Функция `mysqli_execute` объявлена устаревшей
В PHP 8.5 продолжается оптимизация API расширения mysqli. Одно из значимых изменений — объявление устаревшим алиаса mysqli_execute для функции mysqli_stmt_execute.
Причины устаревания mysqli_execute
Алиас mysqli_execute создаёт путаницу среди разработчиков, работающих с подготовленными запросами (prepared statements). Название не отражает, что данный псевдоним работает исключительно с объектами mysqli_stmt, а не с соединениями mysqli.
Начиная с PHP 8.5, вызов этого алиаса генерирует предупреждение:
mysqli_execute($stmt); // Function mysqli_execute() is deprecated since 8.5, use mysqli_stmt_execute() insteadРекомендуемая замена
Поскольку mysqli_execute является псевдонимом mysqli_stmt_execute, замена обратно совместима и сохраняет идентичную функциональность:
-mysqli_execute($stmt);
+mysqli_stmt_execute($stmt);
Альтернатива: mysqli_execute_query
Для PHP 8.2 и выше доступна функция mysqli_execute_query, которая выполняет подготовленные запросы напрямую через объект соединения:
$query = 'SELECT uid, username FROM users WHERE uid = ?';
-$statement = mysqli_prepare($connection, $query);
-mysqli_execute($statement);
-$result = mysqli_stmt_get_result($statement);
+$result = mysqli_execute_query($connection, $query, $uid);
Этот подход сокращает количество шагов и улучшает читаемость кода.
План миграции
- Поиск вызовов
mysqli_executeв кодовой базе - Замена на
mysqli_stmt_executeдля обратной совместимости - Рассмотрение
mysqli_execute_queryдля новых разработок - Тестирование изменённого кода
Часто задаваемые вопросы
Вопрос: Когда mysqli_execute будет полностью удалена из PHP? Ответ: В соответствии с политикой устаревания PHP, функции обычно объявляются deprecated за 2-3 мажорных версии до полного удаления. Для mysqli_execute, устаревшей в PHP 8.5, полное удаление может произойти в PHP 9.0 или 10.0, в зависимости от решения разработчиков ядра PHP.
Вопрос: Как найти все вызовы mysqli_execute в моём проекте? Ответ: Для поиска всех обращений к устаревшему алиасу используйте:
- Статические анализаторы кода: PHPStan, Psalm
- Команду grep:
grep -r "mysqli_execute" /путь/к/проекту/ - Регулярное выражение:
/mysqli_execute\(/ - IDE с поиском по проекту (PhpStorm, VS Code)
Вопрос: Существуют ли автоматические инструменты для замены устаревшего алиаса? Ответ: Да, доступны автоматические инструменты миграции:
- RectorPHP с правилом для замены
mysqli_execute - PHP CS Fixer с кастомными правилами
- Скрипты на sed/awk для пакетной замены
Вопрос: Каковы риски при замене mysqli_execute на mysqli_stmt_execute? Ответ: Риски минимальны, поскольку mysqli_execute является точным псевдонимом mysqli_stmt_execute. Обе функции имеют идентичную сигнатуру и поведение. Замена обратно совместима и не должна вызывать ошибок в правильно работающем коде.
Заключение
Объявление mysqli_execute устаревшей — часть глобальной работы по улучшению согласованности API расширения mysqli. Замена на mysqli_stmt_execute сохраняет обратную совместимость, а mysqli_execute_query предлагает современный подход для PHP 8.2+.
Рекомендуем начать миграцию как можно скорее, чтобы обеспечить совместимость с будущими версиями PHP.