W3docs

error

В этой статье рассматривается функция mysqli_error() в PHP для получения сообщения об ошибке последней операции MySQLi.

В этой статье мы сосредоточимся на функции mysqli_error() в PHP, которая используется для получения сообщения об ошибке из последнего вызова функции MySQLi. На этой странице описаны синтаксис функции, её параметры и возвращаемое значение, рассмотрены практические примеры, а также приведены ссылки на связанные функции обработки ошибок.

Введение в функцию mysqli_error()

Функция mysqli_error() — это встроенная функция PHP, которая возвращает строку с описанием ошибки, возникшей в ходе последней операции MySQLi на указанном соединении. Если последний вызов завершился успешно или ни одной операции ещё не выполнялось, функция возвращает пустую строку ("").

Она необходима, поскольку большинство функций MySQLi (например, mysqli_query()) сигнализируют об ошибке, возвращая лишь false. Это сообщает вам о том, что что-то пошло не так, но не что именно. Функция mysqli_error() восполняет этот пробел, возвращая удобочитаемое сообщение, сгенерированное сервером MySQL, например Table 'database.my_table' doesn't exist.

Синтаксис

mysqli_error(mysqli $mysqli): string

Параметр

  • $mysqli (обязательный) — object-соединение MySQLi, возвращённый функцией mysqli_connect() (или mysqli_init() + mysqli_real_connect()). Сообщённая ошибка относится именно к этому соединению.

Возвращаемое значение

Строка с описанием ошибки для последней операции на $mysqli. Пустая строка означает отсутствие ошибки. Поскольку пустая строка является «ложным» (falsy) значением в PHP, как правило, ветвление выполняется по результату неудавшегося вызова (например, !$result), а не по значению mysqli_error().

Объектный и процедурный стиль. На этой странице используется процедурный стиль — mysqli_error($mysqli). В объектно-ориентированном API эквивалентом является свойство только для чтения $mysqli->error.

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

Использование функции mysqli_error() не представляет сложности. Вы вызываете её на действующем object-соединении MySQLi. Пример:

Как использовать функцию mysqli_error()?

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);

if (!$result) {
    $error_msg = mysqli_error($mysqli);
    echo "Failed to execute query. Error message: " . $error_msg;
    exit();
}

mysqli_close($mysqli);
?>

В этом примере мы вызываем функцию mysqli_connect() для подключения к базе данных MySQL. Затем выполняем запрос с помощью функции mysqli_query() и сохраняем результат в переменной. Проверяем наличие ошибки в запросе с помощью условия !$result. Если ошибка обнаружена, передаём object-соединение в mysqli_error(), чтобы получить конкретное сообщение об ошибке, отобразить его и завершить скрипт.

Примечание: Всегда проверяйте, что mysqli_connect() возвращает корректный object, прежде чем выполнять запросы. Если соединение не установлено, mysqli_query() вызовет предупреждение PHP.

Расширенное использование

Функция mysqli_error() также может применяться при работе с несколькими соединениями. Пример:

Расширенное использование PHP mysqli_error()

<?php
$mysqli1 = mysqli_connect("localhost", "username", "password", "database1");
$mysqli2 = mysqli_connect("localhost", "username", "password", "database2");

$query = "SELECT * FROM my_table";
$result1 = mysqli_query($mysqli1, $query);
$result2 = mysqli_query($mysqli2, $query);

if (!$result1) {
    $error_msg = mysqli_error($mysqli1);
    echo "Failed to execute query on connection 1. Error message: " . $error_msg;
    exit();
}

if (!$result2) {
    $error_msg = mysqli_error($mysqli2);
    echo "Failed to execute query on connection 2. Error message: " . $error_msg;
    exit();
}

mysqli_close($mysqli1);
mysqli_close($mysqli2);
?>

В этом примере мы устанавливаем два отдельных соединения и выполняем один и тот же запрос на каждом из них. Результат проверяется для каждого соединения независимо. Если запрос завершается ошибкой, мы передаём соответствующий object-соединения в mysqli_error(), чтобы изолировать и отобразить конкретную ошибку. Это важно, потому что mysqli_error() привязана к конкретному соединению — вызов её на $mysqli1 никогда не сообщит об ошибке, произошедшей на $mysqli2.

Современная обработка ошибок с использованием исключений

Для новых PHP-приложений рекомендуется включить обработку ошибок на основе исключений вместо проверки mysqli_error() после каждого вызова. Добавьте эту строку перед подключением:

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $mysqli = mysqli_connect("localhost", "username", "password", "database");
    $result = mysqli_query($mysqli, "SELECT * FROM my_table");
} catch (mysqli_sql_exception $e) {
    echo "Database error: " . $e->getMessage();
}
?>

При установке MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT неудачное соединение или запрос автоматически выбрасывает объект mysqli_sql_exception вместо возврата false. То же сообщение, которое можно было бы получить через mysqli_error(), доступно через $e->getMessage(). Начиная с PHP 8.1 этот режим отчётности является режимом по умолчанию, поэтому большинство современного кода использует try/catch вместо ручных проверок.

Распространённые ошибки

  • Передача неправильного соединения. mysqli_error() сообщает об ошибках для того соединения, которое вы передаёте. Передавайте тот же $mysqli, который использовался для неудавшегося запроса.
  • Вызов после mysqli_close(). После закрытия соединения object становится недействительным, и считать из него ошибку невозможно.
  • Ошибки подключения. Если сам mysqli_connect() завершается неудачей, он возвращает false (или выбрасывает исключение в строгом режиме). Для ошибок на этапе подключения используйте mysqli_connect_error() — функция mysqli_error() предназначена для ошибок после успешного подключения.

Заключение

Функция mysqli_error() — удобный инструмент для отладки и обработки ошибок MySQLi. Проверяя корректность соединения и понимая, как получать конкретные сообщения об ошибках, вы сможете создавать более надёжные взаимодействия с базой данных.

Связанные функции

  • mysqli_query() — выполнение запроса, сбой которого вы будете анализировать.
  • mysqli_connect_error() — сообщение об ошибке при неудавшейся попытке подключения.
  • mysqli_connect_errno() — числовой код ошибки при неудавшемся подключении.
  • Обзор PHP MySQLi — полное расширение MySQLi.
  • try/catch и исключения — обработка ошибок на основе исключений.

Практика

Практика
Какие способы обработки ошибок существуют в PHP?
Какие способы обработки ошибок существуют в PHP?
Was this page helpful?