W3docs

Полное руководство по функции mysqli_warning_count в PHP

При работе с базами данных MySQL в PHP расширение mysqli предоставляет различные функции для работы с базой данных. Одной из них является

При работе с базами данных MySQL в PHP расширение mysqli предоставляет различные функции для работы с базой данных. Одной из них является mysqli_warning_count, которая была объявлена устаревшей в PHP 8.0 и удалена в PHP 8.1. Ранее она возвращала количество предупреждений, сгенерированных предыдущим запросом MySQL.

Это руководство охватывает возможности функции и демонстрирует, как эффективно использовать её в ваших PHP-проектах.

Что такое функция mysqli_warning_count?

Функция mysqli_warning_count была встроенной функцией PHP, которая возвращала количество предупреждений, сгенерированных при выполнении предыдущего запроса MySQL. Она была объявлена устаревшей в PHP 8.0 и удалена в PHP 8.1. В отличие от ошибок, которые обычно прерывают выполнение скрипта, предупреждения указывают на некритические проблемы, такие как усечение данных или вставка дублирующихся ключей, при которых запрос успешно завершается.

Функция принимает один аргумент: объект соединения MySQL, возвращаемый функцией mysqli_connect или конструктором new mysqli().

Вот синтаксис функции mysqli_warning_count:

mysqli_warning_count($connection);

Возможности функции mysqli_warning_count

Функция mysqli_warning_count предоставляла ряд возможностей, делавших её полезным инструментом для получения информации о предупреждениях, возникающих при выполнении запросов к базам данных MySQL в PHP. Ниже перечислены ключевые особенности функции:

1. Получение количества предупреждений

Основная возможность функции mysqli_warning_count — получение количества предупреждений, сгенерированных при выполнении предыдущего запроса MySQL. Эта информация может быть полезна для диагностики потенциальных проблем с сервером MySQL при выполнении запросов.

2. Требование объекта соединения

Функция требовала действительный объект соединения MySQL. Вы могли передать существующее соединение, чтобы получить количество предупреждений от последнего выполненного на нём запроса.

3. Подсчёт предупреждений, а не ошибок

mysqli_warning_count отражала только предупреждения — некритические условия, возникшие при выполнении последнего оператора. Ошибки (которые прерывают выполнение оператора) сообщаются отдельно через mysqli_error() / mysqli_errno(). Таким образом, запрос может завершиться успешно и при этом сгенерировать одно или несколько предупреждений.

Как использовать функцию mysqli_warning_count

Ниже описаны шаги по использованию функции mysqli_warning_count в ваших PHP-проектах:

1. Подключение к серверу MySQL

Прежде чем использовать функцию mysqli_warning_count, необходимо установить соединение с сервером MySQL с помощью функции mysqli_connect. Вот пример кода:

<?php

$host = 'localhost';
$user = 'username';
$password = 'password';
$database = 'mydatabase';

$connection = mysqli_connect($host, $user, $password, $database);

if (!$connection) {
    die('Connection failed: ' . mysqli_connect_error());
}

2. Получение количества предупреждений

После установки соединения с сервером MySQL и выполнения запроса вы можете использовать функцию mysqli_warning_count, чтобы получить количество предупреждений, сгенерированных при выполнении предыдущего запроса MySQL. Вот пример кода:

<?php

// Execute a query that generates a warning (e.g., duplicate key insertion)
// Assumes a table 'users' exists with a unique key on 'id'
mysqli_query($connection, "INSERT IGNORE INTO users (id, name) VALUES (1, 'Alice'), (1, 'Bob')");

// Get the number of warnings
$warning_count = mysqli_warning_count($connection);
echo "Warning count: " . $warning_count;

// Retrieve the actual warning messages
$warnings = mysqli_get_warnings($connection);
if ($warnings) {
    while ($warning = $warnings->next_warning()) {
        echo "Level: " . $warning->Level . ", Message: " . $warning->Message . "\n";
    }
}

Этот код получает количество предупреждений, сгенерированных при выполнении предыдущего запроса MySQL, с помощью функции mysqli_warning_count, а также демонстрирует, как получить подробные сообщения о предупреждениях с использованием mysqli_get_warnings().

Типичный вывод приведённого выше фрагмента выглядит примерно следующим образом:

Warning count: 1
Level: Note, Message: Duplicate entry '1' for key 'PRIMARY'

Современная замена (PHP 8.1+)

Поскольку mysqli_warning_count больше не существует в PHP 8.1 и более поздних версиях, используйте свойство соединения $mysqli->warning_count для получения количества предупреждений, а mysqli_get_warnings() (по-прежнему доступна) — для чтения деталей:

<?php

$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');

$mysqli->query("INSERT IGNORE INTO users (id, name) VALUES (1, 'Alice'), (1, 'Bob')");

// Property replacing the removed mysqli_warning_count() function
echo "Warning count: " . $mysqli->warning_count . "\n";

if ($warnings = $mysqli->get_warnings()) {
    do {
        echo "Code {$warnings->errno}: {$warnings->message}\n";
    } while ($warnings->next());
}

Для нового кода рекомендуется включать обработку исключений, чтобы ошибки генерировали mysqli_sql_exception и не проходили незаметно:

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Заключение

Подводя итог, можно сказать, что mysqli_warning_count ранее предоставляла простой способ проверки предупреждений MySQL после выполнения запроса. Однако, поскольку она была удалена в PHP 8.1, современная разработка на PHP, как правило, опирается на обработку ошибок на основе исключений (mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)) для надёжного управления ошибками. Если вы поддерживаете устаревшие кодовые базы, вы всё равно можете использовать mysqli_get_warnings() для получения подробных сведений о предупреждениях от сервера MySQL.

Практика

Практика
В PHP 8.1+, как прочитать количество предупреждений от последнего запроса в соединении mysqli?
В PHP 8.1+, как прочитать количество предупреждений от последнего запроса в соединении mysqli?
Was this page helpful?