PHP 8.5: Функция `mysqli_execute` объявлена устаревшей

В PHP 8.5 функция `mysqli_execute` объявлена устаревшей. Узнайте, как правильно заменить её на `mysqli_stmt_execute` и обеспечить совместимость кода с будущими версиями PHP.

В 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);

Этот подход сокращает количество шагов и улучшает читаемость кода.

План миграции

  1. Поиск вызовов mysqli_execute в кодовой базе
  2. Замена на mysqli_stmt_execute для обратной совместимости
  3. Рассмотрение mysqli_execute_query для новых разработок
  4. Тестирование изменённого кода

Часто задаваемые вопросы

Вопрос: Когда mysqli_execute будет полностью удалена из PHP? Ответ: В соответствии с политикой устаревания PHP, функции обычно объявляются deprecated за 2-3 мажорных версии до полного удаления. Для mysqli_execute, устаревшей в PHP 8.5, полное удаление может произойти в PHP 9.0 или 10.0, в зависимости от решения разработчиков ядра PHP.

Вопрос: Как найти все вызовы mysqli_execute в моём проекте? Ответ: Для поиска всех обращений к устаревшему алиасу используйте:

Вопрос: Существуют ли автоматические инструменты для замены устаревшего алиаса? Ответ: Да, доступны автоматические инструменты миграции:

Вопрос: Каковы риски при замене mysqli_execute на mysqli_stmt_execute? Ответ: Риски минимальны, поскольку mysqli_execute является точным псевдонимом mysqli_stmt_execute. Обе функции имеют идентичную сигнатуру и поведение. Замена обратно совместима и не должна вызывать ошибок в правильно работающем коде.

Заключение

Объявление mysqli_execute устаревшей — часть глобальной работы по улучшению согласованности API расширения mysqli. Замена на mysqli_stmt_execute сохраняет обратную совместимость, а mysqli_execute_query предлагает современный подход для PHP 8.2+.

Рекомендуем начать миграцию как можно скорее, чтобы обеспечить совместимость с будущими версиями PHP.

Комментарии


Дополнительные материалы

Предыдущая Статья

PHP 8.5: Отказ от использования нестандартных имён приведения типов